什么关于标题会谈的一个例子:
#seen in a demo of PyOpenGL
# http://PyOpenGL.sourceforge.net/
size = self.size = self.GetClientSize()
这是什么用的呢? 它是如何工作的,并使用它的时候?
我的想法是,这允许指定的第三个项目的第一和第二的价值......如果是这样的话,我们可以嵌套瓦尔无限多的。
什么关于标题会谈的一个例子:
#seen in a demo of PyOpenGL
# http://PyOpenGL.sourceforge.net/
size = self.size = self.GetClientSize()
这是什么用的呢? 它是如何工作的,并使用它的时候?
我的想法是,这允许指定的第三个项目的第一和第二的价值......如果是这样的话,我们可以嵌套瓦尔无限多的。
这是一个链接分配。 你们都设置size
和self.size
到的返回值self.GetClientSize()
你可以链分配与放弃:
>>> foo = bar = spam = eggs = 'frobnicators'
>>> foo
'frobnicators'
>>> bar, spam, eggs
('frobnicators', 'frobnicators', 'frobnicators')
需要注意的是在右边的表达只计算一次,它的价值被分配到由左到右的所有左边的变量。
这可以很容易地看出,如果你反编译蟒蛇字节码:
>>> 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
。
当你想在同一个语句的RHS值分配给两个变量..
a = b = 2
a和b都包含2 ..
这可以当你想创建一个使用alias
为您的变量,你刚分配的价值,因为可能要使用该值以两种不同的方式..
这大致相当于
temp=self.GetClientSize()
size=temp
self.size=temp
del temp
但它的执行速度更快,并且通常是很容易,这种形式的阅读。 请注意,这是不一样的
self.size=self.GetClientSize()
size=self.getClientSize()
其执行self.getClientSize()2倍,也不一样
self.size=self.GetClientSize()
size=self.size
守
class test(object):
def setter(self, val):
self._t=val
def getter(self):
return 5
t=property(fget=getter,fset=setter)
a=test()
b=a.t=9
print a.t, b
印刷5 9