За исключением итерации через повторяемое и подсчета количества повторений, нет. Это - то, что делает его повторяемым и не списком. Это не действительно даже определенная для Python проблема. Посмотрите на классическую структуру данных связанного списка. Нахождение длины является O (n) операция, которая включает итерацию целого списка для нахождения числа элементов.
Как mcrute упомянутый выше, можно, вероятно, уменьшить функцию до:
def count_iterable(i):
return sum(1 for e in i)
, Конечно, при определении собственного повторяемого объекта можно всегда реализовывать __len__
сами и проводить подсчет элемента где-нибудь.
У меня есть другой подход для этого:
Редактировать глобальный конфигурационный файл. Например, в моем случае это .netcf2.0, поэтому это $(MSBuildBinPath)\microsoft.compactframework.csharp.targets
.
Добавьте следующую строку:
<Import Project="$(SolutionDir)CommonSettings.targets" Condition="exists('$(SolutionDir)CommonSettings.targets')" />
Это означает, что MSBuild импортирует CommonSettings.targets, если он существует в папке вашего решения.
Создайте CommonSettings.targets в папке вашего решения.
Например, для определения символа ABC:
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<DefineConstants>$(DefineConstants);ABC</DefineConstants>
</PropertyGroup>
</Project>