Python 中的链式赋值如何工作?它们真的相当于多个顺序分配吗?

Susan Sarandon
发布: 2024-10-28 03:07:31
原创
1004 人浏览过

How do chained assignments work in Python? Are they truly equivalent to multiple sequential assignments?

理解 Python 中的链式赋值

Python 中的链式赋值(例如“x = y = somefunction()”等表达式)引发了人们的关注关于它们与多个顺序赋值的等价性的讨论(“x = somefunction(); y = somefunction()”)。为了弄清楚这个问题,让我们详细探讨一下链式赋值的操作。

在链式赋值中,最左边的目标首先被赋值。因此,“x = y = somefunction()”相当于:

temp = somefunction()
x = temp
y = temp
登录后复制

这个顺序至关重要,因为左边的目标在分配给临时变量“temp”之前接收到临时变量“temp”的值目标向右。这在链式赋值函数的反汇编中很明显:

>>> def chained_assignment():
...     x = y = some_function()
...
>>> import dis
>>> dis.dis(chained_assignment)
  2           0 LOAD_GLOBAL              0 (some_function)
              3 CALL_FUNCTION            0
              6 DUP_TOP
              7 STORE_FAST               0 (x)
             10 STORE_FAST               1 (y)
             13 LOAD_CONST               0 (None)
             16 RETURN_VALUE
登录后复制

请注意,函数返回的值首先存储在“x”中,然后存储在“y”中。

这个理解对于理解链式作业的行为至关重要。例如,应避免使用“x = y = []”这样的表达式,因为“x”和“y”都引用同一个列表。相反,支持单独的赋值,例如“x = []”和“y = []”来创建不同的列表。

以上是Python 中的链式赋值如何工作?它们真的相当于多个顺序分配吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!