Уведомления

Группа в Telegram: @pythonsu

#1 Июль 7, 2012 00:15:45

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Generator expression must be parenthesized if not sole argument

Обьясните кто-нибудь, что это значит.

Офлайн

#2 Июль 7, 2012 05:35:58

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Generator expression must be parenthesized if not sole argument

>>> 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>.
>>>



Офлайн

#3 Июль 7, 2012 08:29:35

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Generator expression must be parenthesized if not sole argument

Это тройка? У меня оно на двойке вылазило.

А почему надо было так сделать, что генератор обязательно заключать в скобки, причем не обязательно круглые?

Офлайн

#4 Июль 7, 2012 09:03:19

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Generator expression must be parenthesized if not sole argument

>>> 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” как “включение”



Отредактировано py.user.next (Июль 7, 2012 09:06:03)

Офлайн

#5 Июль 7, 2012 10:05:29

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Generator expression must be parenthesized if not sole argument

Теперь понятнее стало.

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

Хотя, после запятой всегда должно идти зарезервированное слово in?

Отредактировано odnochlen (Июль 7, 2012 10:23:10)

Офлайн

#6 Июль 7, 2012 11:41:32

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Generator expression must be parenthesized if not sole argument

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

f(a in b, c)
 
f((i for i in (1, 2, 3)) and a in b, c)



Отредактировано py.user.next (Июль 7, 2012 11:51:16)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version