Python生成器表达式括号奇异性
我想检查一个列表里是否包含某个字符串,所以我用了一个生成器表达式,像这样:
g = (s for s in myList if s == myString)
any(g)
当然,我想把它写得更简洁一点,所以我这样做:
any((s for s in myList if s == myString))
然后我觉得用单个括号看起来更好,所以我试了一下:
any(s for s in myList if s == myString)
其实我并不指望它能成功。结果让我惊讶的是,它竟然可以!
那么,这在Python里算不算合法的写法,还是说只是我用的这个版本允许这样?如果是合法的,那一般有什么规则呢?
2 个回答
3
这是“合法”的,并且是明确支持的。一般来说,规则是“((x))
总是和(x)
一样”(当然,(x)
并不总是和
23
这是合法的,通常来说,你确实需要在生成器表达式周围加上括号。不过有个特别的例外,如果是调用一个只有一个参数的函数,那个函数的括号也算在内。 (文档)
注意,检查 my_string
是否在 my_list
中非常简单,只需要这样做:
my_string in my_list
根本不需要生成器表达式或者调用 any()
!