Python generator expression parentheses oddity

generator-expression, parentheses, python

Solution

It is legal, and the general rule is that you do need parentheses around a generator expression. As a special exception, the parentheses from a function call also count (for functions with only a single parameter). (Documentation)

Note that testing if `my_string` appears in `my_list` is as easy as

my_string in my_list

No generator expression or call to `any()` needed!

Problem

I want to determine if a list contains a certain string, so I use a generator expression, like so: ``` g = (s for s in myList if s == myString) any(g) ``` Of course I want to inline this, so I do: ``` any((s for s in myList if s == myString)) ``` Then I think it would look nicer with single parens, so I try: ``` any(s for s in myList if s == myString) ``` not really expecting it work. Surprise! it does! So is this legal Python or just something my implementation allows? If it's legal, what is the general rule here?

Original source