Python生成器表达式括号奇怪

时间:2012-02-15 16:56:00

标签: python parentheses generator-expression

我想确定一个列表是否包含某个字符串,所以我使用了一个生成器表达式,如下所示:

g = (s for s in myList if s == myString)
any(g)

当然我想内联这个,所以我这样做:

any((s for s in myList if s == myString))

然后我觉得单个parens会更好看,所以我试试:

any(s for s in myList if s == myString)

并不是真的期待它的运作。惊喜!它确实!

这是合法的Python还是我的实现允许的东西?如果它是合法的,这里的一般规则是什么?

2 个答案:

答案 0 :(得分:14)

这是合法的,一般规则是你需要在生成器表达式周围使用括号。作为一个特殊的例外,函数调用的括号也会计数(对于只有一个参数的函数)。 (Documentation

请注意,my_string中出现my_list时的测试就像

一样简单
my_string in my_list

不需要生成器表达式或调用any()

答案 1 :(得分:3)

这是“合法的”,并得到明确支持。一般规则是“((x))始终与(x)相同”(即使(x)当然并不总是与x相同),并且它应用于生成器表达式为方便起见。