需要了解Python生成器对象

时间:2012-07-26 15:27:38

标签: python generator generator-expression

以下内容:

name = 'TODD'
chars = set('AEIOU')
for ii in range(-1, int(math.copysign(len(name) + 1, -1)), -1):
    if any((cc in chars) for cc in name[ii]):
        print 'Found'
    else:
        print 'Not Found'

我明白任何(...)里面的东西都是生成器对象。我不明白的是缺少括号 - 如果括号属于any()函数,那么生成器表达式周围是否应该有另一组括号?

感谢。

4 个答案:

答案 0 :(得分:12)

当在只有一个参数的函数调用中使用时,可以省略括号,generator expression syntax专门允许它。

  

只有一个参数的调用可以省略括号。有关详细信息,请参阅Calls部分。

答案 1 :(得分:2)

如果表达式已经是括号中的唯一内容,则可以省略生成器表达式的括号。

来自documentation

  

只有一个参数的调用可以省略括号。

答案 2 :(得分:2)

不,不需要额外的parens,实际上也不是你正在测试的“布尔表达式”所必需的parens,请看这两个简单的例子:

In [37]: any(i > 10 for i in range(19))
Out[37]: True

In [38]: all(i > 10 for i in range(19))
Out[38]: False

你所拥有的是一个带有单个参数的函数调用(你的生成器表达式),所以不需要parens。有关详细信息,请参阅generator expressions docs

答案 3 :(得分:1)

对于只有一个参数(生成器表达式)的函数调用,docs不需要它们

  

只有一个参数的调用可以省略括号。请参阅电话详细信息部分。