标题所谈内容的示例:
#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
中。
关于Python vars 嵌套赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12655902/