Странный python для синтаксиса, как это работает, как он называется?
print max(3 for i in range(4))
#output is 3
Использование Python 2.6
3 сбивает меня с толку, вот моя попытка объяснить, что происходит.
поскольку i в диапазоне (4) создает цикл, который повторяется 4 раза, увеличивая значение i от 0 до 3 в начале каждого цикла. [не знаю, что означает 3 в этом контексте...] max() возвращает наибольшую итерацию, переданную ей, и результат выводится на экран.
4 ответа
3 for i in range(4)
это генератор, который дает 3 четыре раза подряд и max
принимает итерацию и возвращает элемент с наибольшим значением, которое, очевидно, здесь три.
Это оценивает:
print max([3,3,3,3])
... что это сложный способ сказать print 3
,
expr for x in xs
является генератором выражения. Как правило, вы бы использовали x
в expr
, Например:
[2*i for i in range(4)] #=> [0, 2, 4, 6]
Это может быть переписано как:
nums = []
for i in range(4):
nums.append(3)
print max(nums) # 3! Hurrah!
Я надеюсь, что это делает его бессмысленность более очевидной.
Выражение:
print max(3 for i in range(4))
Печатает результат max()
Функция применяется к тому, что в скобках. Однако в скобках есть выражение генератора, создающее нечто похожее на массив со всеми элементами, равными 3
, но более эффективно, чем выражение:
print max([3 for i in range(4)])
который создаст массив 3
и уничтожить его после того, как он больше не нужен.
В основном, потому что в скобках вы будете создавать только равные значения и max()
Функция возвращает самый большой, вам не нужно создавать более одного элемента. Потому что с количеством элементов всегда равным одному, max()
функция становится ненужной, и ваш код может быть эффективно заменен (по крайней мере, в случае, который вы дали) следующим кодом:
print 3
Это просто все;)
Чтобы узнать больше о различиях между пониманием и выражением генератора, вы можете посетить страницу документации.