Skip to main content
 首页 » 编程设计

Python vars 嵌套赋值

2025年05月04日12txw1958

标题所谈内容的示例:

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

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

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

请您参考如下方法:

这是一个链式赋值。您将 size 和 self.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 中。