Странный 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

Это просто все;)

Чтобы узнать больше о различиях между пониманием и выражением генератора, вы можете посетить страницу документации.

Другие вопросы по тегам