gpt4 book ai didi

python - 为什么你可以在 for 循环中循环一个隐式元组,而不是 Python 中的一个理解?

转载 作者:IT老高 更新时间:2023-10-28 21:10:20 26 4
gpt4 key购买 nike

为什么在 for 循环中循环通过隐式元组是可以的,但是当您在理解中执行时会出现语法错误,这是有原因的吗?

例如:

for i in 'a','b','c': 
print(i)

'a'
'b'
'c'

但在理解中:

>>> [i for i in 'a','b','c']
File "<stdin>", line 1
[i for i in 'a','b','c']
^
SyntaxError: invalid syntax

这是有原因的吗?我不确定正确的术语,所以我的搜索没有任何用处。

更新:

根据评论,此语法 适用于 Python 2.x,但不适用于 Python 3.x。

最佳答案

这在 Python3 中有所改变,主要是为了使列表推导与生成器表达式更加一致。

使用 for 循环和列表推导式,使用不带括号的元组时没有歧义,因为前者总是以冒号结尾,而后者则以右括号或 for/if 关键字。

但是,生成器表达式的部分设计要求它们可以“裸”用作函数参数:

>>> list(i for i in range(3))
[0, 1, 2]

这会为未加括号的元组带来一些歧义,因为任何逗号都可能引入新参数:

>>> list(i for i in 0, 1, 2)
File "<stdin>", line 1
SyntaxError: Generator expression must be parenthesized if not sole argument

因此元组必须始终在生成器表达式中加上括号,并且现在同样的限制也适用于列表推导以保持一致性。

PS:

Guido van Rossum 在他的 Python 历史博客中写了一篇文章,详细说明了这个主题:

关于python - 为什么你可以在 for 循环中循环一个隐式元组,而不是 Python 中的一个理解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41127441/

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