2012-07-26 51 views
5

在下面:需要了解Python的发电机对象

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()函数,那么围绕生成器表达式的括号不应该有另外一组括号吗?

谢谢。

回答

12

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

只有一个参数的调用可以省略括号。细节请参见Calls

+2

我不认为你粘贴了你的意思。 – interjay 2012-07-26 15:30:55

+0

@interjay:良好的捕捉,c&p失败。任何人都喜欢挪威音乐节的音乐会? :-P已更正。 – 2012-07-26 15:32:27

+0

谢谢,并感谢所有回复的人。 – Sabuncu 2012-07-26 16:41:45

2

如果表达式是括号中唯一的东西,那么您可以省略生成器表达式的括号。

documentation

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

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 

你有什么是函数调用一个参数(您的生成器表达式),所以不需要parens。有关更多信息,请参阅generator expressions docs

+0

并没有真正回答这个问题。 – 2012-07-26 15:31:17

+1

@KolyolyHorvath更好? – Levon 2012-07-26 15:34:01

1

对于函数只用一个参数(即发生器表达)调用,它们不是每docs

括号可以在呼叫只用一个参数被省略必需的。详情请参阅呼叫部分。