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?

有帮助吗?

解决方案

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!

其他提示

It's "legal", and expressly supported. The general rule is "((x)) is always the same as (x)" (even though (x) is not always the same as x of course,) and it's applied to generator expressions simply for convenience.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top