6

在下面的:

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(...) 里面是一个生成器对象。我不明白的是缺少括号 - 如果括号属于 any() 函数,那么生成器表达式周围不应该有另一组括号吗?

谢谢。

4

4 回答 4

13

在只有一个参数的函数调用中使用括号可以省略,生成器表达式语法特别允许。

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

于 2012-07-26T15:30:02.263 回答
2

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

文档中:

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

于 2012-07-26T15:30:24.517 回答
2

不,不需要额外的括号,实际上您正在测试的“布尔表达式”也不需要括号,请参阅以下两个简单示例:

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

您所拥有的是带有单个参数(您的生成器表达式)的函数调用,因此不需要括号。有关更多信息,请参阅生成器表达式文档

于 2012-07-26T15:30:44.853 回答
1

对于只有一个参数(该生成器表达式)的函数调用,根据文档,它们不是必需的

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

于 2012-07-26T15:30:45.127 回答