【问题标题】:Need to understand Python generator object需要了解 Python 生成器对象
【发布时间】:2012-07-25 05:46:48
【问题描述】:

如下:

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

谢谢。

【问题讨论】:

    标签: python generator generator-expression


    【解决方案1】:

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

    只有一个参数的调用可以省略括号。详见Calls部分。

    【讨论】:

    • 我认为您没有粘贴您想要粘贴的链接。
    • @interjay:很好的捕获,c&p 失败。还有其他人喜欢挪威节日音乐会的曲目吗? :-P 已更正。
    【解决方案2】:

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

    来自documentation

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

    【讨论】:

      【解决方案3】:

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

      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
      

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

      【讨论】:

      • 并没有真正回答这个问题。
      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2010-12-17
        • 2012-01-25
        • 1970-01-01
        • 2020-12-21
        • 1970-01-01
        • 2015-01-12
        • 2012-09-10
        • 2017-11-18
        • 1970-01-01
        相关资源
        最近更新 更多