为什么在 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/