了解 Python 多重赋值
Understanding Python multiple assignment
考虑这个赋值语句示例:
>>> x, y = x[y] = {}, None
>>> x
{None: ({...}, None)}
>>> y
>>>
分配给 x
的值是多少,这个分配是如何工作的?
该语句将最右侧的值分配给其左侧的每个目标,从左侧 开始。因此,它相当于
t = {}, None
x, y = t
x[y] = t
因此,t
开始时是一个由空 dict
和值 None
.
组成的元组
接下来,我们解包t
并将每个部分分配给x
和y
:x
绑定到空的dict
,而y
绑定到 None
.
最后,我们也可以将元组分配给 x[y]
,因为我们刚刚定义了 x
和 y
。 None
被添加到 x
引用的 dict
中,它的值是原来的元组。因此,我们使 x[y]
引用 x
本身:一个循环!
Python 可以检测到这个循环,所以它将 dict
显示为 {...}
,而不是试图将其无限扩展到 {None: ({None: ({None: ...
.
考虑这个赋值语句示例:
>>> x, y = x[y] = {}, None
>>> x
{None: ({...}, None)}
>>> y
>>>
分配给 x
的值是多少,这个分配是如何工作的?
该语句将最右侧的值分配给其左侧的每个目标,从左侧 开始。因此,它相当于
t = {}, None
x, y = t
x[y] = t
因此,t
开始时是一个由空 dict
和值 None
.
接下来,我们解包t
并将每个部分分配给x
和y
:x
绑定到空的dict
,而y
绑定到 None
.
最后,我们也可以将元组分配给 x[y]
,因为我们刚刚定义了 x
和 y
。 None
被添加到 x
引用的 dict
中,它的值是原来的元组。因此,我们使 x[y]
引用 x
本身:一个循环!
Python 可以检测到这个循环,所以它将 dict
显示为 {...}
,而不是试图将其无限扩展到 {None: ({None: ({None: ...
.