gpt4 book ai didi

python - 为什么以下 Python 生成器表达式有效?

转载 作者:太空宇宙 更新时间:2023-11-04 00:55:54 24 4
gpt4 key购买 nike

我正在努力思考我在野外遇到的一个常见的生成器习语。我注意到它(并使用它)很长时间了,但从来没有费心去质疑它。使用玩具功能的成语示例:

def contains_vowels(string):
vowels = set('aeiou')

if any((char in vowels) for char in string):
return True

return False

为什么 any((char in vowels) for char in string) 按预期工作?我知道 (char in vowels) 是一个生成器表达式,但是例如(char in vowels) for char in string 在函数调用之外不是有效的生成器。

换句话说,假设上面的代码是有效的,为什么下面的代码有效:

    for b in (char in vowels) for char in string:
print b

(显然,使整个表达式成为生成器确实按预期工作:

    for b in (char in vowels for char in string):
print b

)

我知道这是一个有点愚蠢的问题,但答案对我来说不是很直观。这只是“因为这就是语法的工作方式”的情况,还是我遗漏了什么?

最佳答案

I get that (char in vowels) is a generator expression,

其实不然。在这种情况下括号是完全多余的,因为 in 中只有一个运算符。当您有更多运算符时,括号用于设置运算顺序。 (1+2)*3 == 9

(char in vowels) for char in string is not a valid generator outside of a function call.

原来如此。在函数调用中,当生成器是唯一参数时,您可以跳过额外的括号。所以下面两行实际上是一样的。

any(char in vowels for char in string)
any((char in vowels for char in string))

在函数调用之外,生成器必须有括号。

(char in vowels for char in string)

关于python - 为什么以下 Python 生成器表达式有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35120926/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com