Найти - Пользователи
Полная версия: Generator expression must be parenthesized if not sole argument
Начало » Python для новичков » Generator expression must be parenthesized if not sole argument
1
odnochlen
Обьясните кто-нибудь, что это значит.
py.user.next
>>> print(i for i in (1, 2, 3), end='.\n')
  File "<stdin>", line 1
SyntaxError: Generator expression must be parenthesized if not sole argument
>>> print((i for i in (1, 2, 3)), end='.\n')
<generator object <genexpr> at 0xb7492504>.
>>>
odnochlen
Это тройка? У меня оно на двойке вылазило.

А почему надо было так сделать, что генератор обязательно заключать в скобки, причем не обязательно круглые?
py.user.next
>>> 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” как “включение”
odnochlen
Теперь понятнее стало.

Generator expression must be parenthesized if not sole argument - генераторное выражение должно быть обскоблено, если оно не единственный аргумент.

Хотя, после запятой всегда должно идти зарезервированное слово in?
py.user.next
odnochlen
Хотя, после запятой всегда должно идти зарезервированное слово in?
чего ? перед запятой ?
плоский анализ не прокатит

f(a in b, c)
 
f((i for i in (1, 2, 3)) and a in b, c)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB