Странный python для синтаксиса, как это работает, как он называется? - PullRequest
6 голосов
/ 14 мая 2011
print max(3 for i in range(4))
#output is 3

Использование Python 2.6

3 сбивает меня с толку, вот моя попытка объяснить, что происходит.

для i в диапазоне (4) создает цикл, который повторяется 4 раза, увеличивая i с 0 до 3 в начале каждого цикла. [не знаю, что означает 3 в этом контексте ...] max () возвращает наибольшую итерацию, переданную ей, и результат выводится на экран.

Ответы [ 4 ]

14 голосов
/ 14 мая 2011

3 for i in range(4) - это генератор, который выдает 3 четыре раза подряд, а max принимает итерацию и возвращает элемент с наибольшим значением, которое, очевидно, здесь три.

9 голосов
/ 14 мая 2011

Это оценивается как:

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]

5 голосов
/ 14 мая 2011

Может быть переписано как:

nums = []
for i in range(4):
    nums.append(3)
print max(nums) # 3! Hurrah!

Надеюсь, это делает его бессмысленность более очевидной.

2 голосов
/ 14 мая 2011

Выражение:

print max(3 for i in range(4))

Печатает результат функции max(), примененной к тому, что находится в скобках.Однако в скобках есть выражение generator , создающее нечто похожее на массив со всеми элементами, равными 3, но более эффективным способом, чем выражение:

print max([3 for i in range(4)])

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

По сути, потому что в скобках вы создадите только те значения, которые равны, а функция max() возвращает самое большое, вы делаетеНе нужно создавать более одного элемента.Поскольку с числом элементов, всегда равным одному, функция max() становится ненужной, и ваш код может быть эффективно заменен (по крайней мере, в том случае, если вы дали) следующим кодом:

print 3

Тоэто просто все;)

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

...