>>> map(i for i in (1, 2, 3), '')
File "<stdin>", line 1
SyntaxError: Generator expression must be parenthesized if not sole argument
>>> map((i for i in (1, 2, 3)), '')
[]
>>>
odnochlen
А почему надо было так сделать, что генератор обязательно заключать в скобки, причем не обязательно круглые?
потому что он не может определить границы генераторного выражения
запятая может быть в генераторном выражении, и запятая является разделителем аргументов вызова
если аргумент один (запятой нет), то всё нормально
>>> def f(arg):
... print(arg)
...
>>> f(i for i in (1, 2, 3))
<generator object <genexpr> at 0xb75452fc>
>>>
>>> def f(arg, *args):
... print(arg, args)
...
>>> f(i for i in (1, 2, 3))
<generator object <genexpr> at 0xb7545504> ()
>>> f(i for i in (1, 2, 3), 1)
File "<stdin>", line 1
SyntaxError: Generator expression must be parenthesized if not sole argument
>>> f((i for i in (1, 2, 3)), 1)
<generator object <genexpr> at 0xb754534c> (1,)
>>> f((i for i in (1, 2, 3)), i for i in (1, 2, 3))
File "<stdin>", line 1
SyntaxError: Generator expression must be parenthesized if not sole argument
>>> f((i for i in (1, 2, 3)), (i for i in (1, 2, 3)))
<generator object <genexpr> at 0xb75452d4> (<generator object <genexpr> at 0xb7545504>,)
>>>
и генераторное выражение - это выражение только в круглых скобках
чтобы не путать, переводи “comprehension” как “включение”