В Python 3 print () - это функция, а не оператор.
Выражение генератора похоже на понимание списка, за исключением того, что создает объект, который дает результаты , когда вы перебираете его , а не когда вы его создаете. Например,
[i*i for i in range(5)]
создает список [0, 1, 4, 9, 16], а
(i*i for i in range(5))
создает объект-генератор, который будет генерировать эти числа, когда вы перебираете его.
Если вы даете функцию только одному аргументу и это выражение генератора, вы можете опустить скобки вокруг выражения генератора, поэтому вам не нужно делать myfunc ((i + 1 для i в чем-то)).
Итак, вы создаете объект-генератор и передаете его функции print (), которая печатает его представление. Это делает именно то, о чем вы просили, а не то, что вы хотели спросить.
Вы можете инициализировать список из выражения генератора:
print(list(i*i for i in range(5)))
, но его проще в использовании понимание списка:
print([i*i for i in range(5)])
Простым примером того, как вы можете использовать объект-генератор, является:
for value in (i * i for i in range(5)):
print value
, хотя в этом простом примере, очевидно, было бы легче написать:
for i in range(5):
print i * i