Python vars 嵌套赋值

标签 python variable-assignment variables

标题所谈内容的示例:

#seen in a demo of PyOpenGL
# http://PyOpenGL.sourceforge.net/
size = self.size = self.GetClientSize()

这是做什么用的?它是如何工作的以及何时使用它?

我的想法是,这允许将第三项的值分配给第一项和第二项...如果是这样,我们可以嵌套无限数量的变量。

最佳答案

这是一个链式赋值。您将 sizeself.size 都设置为 self.GetClientSize() 的返回值。

你可以用abandon链接赋值:

>>> foo = bar = spam = eggs = 'frobnicators'
>>> foo
'frobnicators'
>>> bar, spam, eggs
('frobnicators', 'frobnicators', 'frobnicators')

请注意,右侧的表达式只计算一次,它的值将从左到右分配给所有左侧变量。

如果你反编译 python 字节码,这很容易看出:

>>> import dis
>>> def foo():
...     bar = baz = eggs = 'spam'
... 
>>> dis.dis(foo)
  2           0 LOAD_CONST               1 ('spam')
              3 DUP_TOP             
              4 STORE_FAST               0 (bar)
              7 DUP_TOP             
              8 STORE_FAST               1 (baz)
             11 STORE_FAST               2 (eggs)
             14 LOAD_CONST               0 (None)
             17 RETURN_VALUE        

DUP_TOP 创建一个对栈上值的额外引用(spam),它存储在 bar 中,然后是 baz 被赋予另一个重复引用,然后该值存储在 eggs 中。

关于Python vars 嵌套赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12655902/

相关文章:

java - 从没有备用行的文件读取时防止出现 NoSuchElementException

python - 将字符串解析为 HTML

python - 在提示时将密码传递给 Python 脚本

python - 使用递归生成组合并跳过或删除项目

javascript - 在 Jquery Mobile 中刷新页面时如何使用 Coldfusion toScript?

Java在方法中将全局变量转换为局部变量的优点

php - PHP函数的 undefined variable 问题

python - 在 Pandas 中将多列与数值组合

c++ - 复制 C 风格的数组和结构

delphi - Delphi 中的返回值检索是否有任何优化?