タイトルの内容の例:
#seen in a demo of PyOpenGL
# http://PyOpenGL.sourceforge.net/
size = self.size = self.GetClientSize()
これは何に使われますか?それはどのように機能し、いつ使用しますか?
私の考えでは、これにより、3 番目の項目の値を 1 番目と 2 番目の項目に割り当てることができます。それであれば、無限の数の変数をネストできます。
タイトルの内容の例:
#seen in a demo of PyOpenGL
# http://PyOpenGL.sourceforge.net/
size = self.size = self.GetClientSize()
これは何に使われますか?それはどのように機能し、いつ使用しますか?
私の考えでは、これにより、3 番目の項目の値を 1 番目と 2 番目の項目に割り当てることができます。それであれば、無限の数の変数をネストできます。
これは連鎖割り当てです。と の両方を の戻り値に設定size
しself.size
ますself.GetClientSize()
。
割り当てを放棄して連鎖させることができます:
>>> foo = bar = spam = eggs = 'frobnicators'
>>> foo
'frobnicators'
>>> bar, spam, eggs
('frobnicators', 'frobnicators', 'frobnicators')
右側の式のみが 1 回評価され、その値がすべての左側の変数に左から右に割り当てられることに注意してください。
これは、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
ます。
RHS の値を同じステートメント内の 2 つの変数に代入する場合。
a = b = 2
a と b の両方に 2 が含まれています。
これは、変数を作成したいときに使用できますalias
。値を代入したばかりです。その値を 2 つの異なる方法で使用したい場合があるためです。
とほぼ同等です。
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