Следующая часть скопирована из официальной, полной Python 3 грамматики .
arglist: argument (',' argument)* [',']
argument: ( test [comp_for] |
test ':=' test |
test '=' test |
'**' test |
'*' test )
comp_iter: comp_for | comp_if
sync_comp_for: 'for' exprlist 'in' or_test [comp_iter]
comp_for: [ASYNC] sync_comp_for
comp_if: 'if' test_nocond [comp_iter]
(arglist
используется в нескольких местах, где вы будете передавать аргументы вызов функции или определение класса).
Меня смущает правило argument : test [comp_for]
. Поскольку генераторы . for . in .
уже являются допустимыми производными от test
, это, по-видимому, означает, что for
в качестве аргумента функции имеет особое значение.
my_function(x for x in range(3))
Однако, просто поиграть с этим определением всегда интерпретировал его как обычный объект-генератор, который создается описанным синтаксисом.
y = (x for x in range(3))
my_function(y)
Итак, есть ли что-то особенное в этом синтаксисе? Или это просто устаревший / будущий зарезервированный код?