Скобки необходимы для создания генератора понимания:



 g = x**x for x in range(10)

File "<stdin>", line 1

g = x**x for x in range(10)

^

SyntaxError: invalid syntax

>>> g = (x**x for x in range(10))

>>> g

<generator object <genexpr> at 0x7f90ed650258>



Однако они могут быть опущены, если понимание функции генератора является единственным аргументом для функции:



 list((x**x for x in range(4)))

[1, 1, 4, 27]

>>> list(x**x for x in range(4))

[1, 1, 4, 27]



Это не работает для функции с более чем одним аргументом:



 print((x**x for x in range(4)), end='\n')

<generator object <genexpr> at 0x7f90ed650468>

>>>

>>>

>>> print(x**x for x in range(4), end='\n')

File "<stdin>", line 1

SyntaxError: Generator expression must be parenthesized if not sole argument