gpt4 book ai didi

python - 为什么 Python 允许解压空的可迭代对象?

转载 作者:行者123 更新时间:2023-12-03 08:22:52 25 4
gpt4 key购买 nike

我正在编写一些代码并犯了一个拼写错误,但它没有错误。回溯起来,我发现这些是有效的:

>>> [] = []
>>> () = ()
>>>

这是可迭代的解包,但没有真正的分配目标。为什么 Python 允许这样做?这在某些情况下有用吗?

Here's where it's defined in the grammar 。我本以为你至少需要一个标识符attributeref订阅切片,但显然不是; target_list 在圆括号或中括号内是可选的。

target ::=  identifier
| "(" [target_list] ")"
| "[" [target_list] "]"
| attributeref
| subscription
| slicing
| "*" target

查看文档历史记录,这在 Python 3.4 之前是不可能的。和 2.6 ,但分配给 [] 已添加到 Python 3.5 中和 2.7Python 3.6 中的 () .

相关:

注意:由于我询问的是设计选择,答案应包括对官方文档或核心开发等权威来源的引用。

最佳答案

基于the relevant Python issue discussion ,分配给空列表 [] 实际上很长一段时间都是可能的,但没有记录。在 3.5 中记录之前,这被认为是“相当无害的怪癖”。然后添加分配给一个空元组 () 以保持一致性。

在同一线程中,Martin Panter provides a possible use case :

[...] I have used this syntax on purpose as a concise way to ensure that a generator is exhaused with no more yields:

>>> def gen():
... yield "partial computation"
... print("computation allowed to complete")
...
>>> g = gen()
>>> next(g)
'partial computation'
>>> [] = g
computation allowed to complete

关于python - 为什么 Python 允许解压空的可迭代对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67359996/

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