你可以使用lambda函數做這種事情。
In [1]: b = 2
In [2]: c = 3
In [3]: a = lambda: b * c
In [4]: a
Out[4]: <function __main__.<lambda>>
In [5]: a()
Out[5]: 6
In [6]: b = 10
In [7]: a()
Out[7]: 30
而且,對於名單:
In [8]: l = lambda: [a(), b, c]
In [9]: l()
Out[9]: [30, 10, 3]
In [10]: b = 1
In [11]: l()
Out[11]: [3, 1, 3]
如果你想不叫A和L的功能,你可以在這樣的一類封裝它們:
class A(object):
@property
def a(self):
if callable(self._a):
return self._a()
else:
return self._a
@a.setter
def a(self, value):
self._a = value
@property
def b(self):
if callable(self._b):
return self._b()
else:
return self._b
@b.setter
def b(self, value):
self._b = value
然後,您在操作a和b時是否是lambda或「普通物體」時無需知道,並且您可以像這樣訪問它們:
In [13]: x = A()
In [14]: x.a = lambda: x.b * 2
In [15]: x.b = 3
In [16]: x.a
Out[16]: 6
In [17]: x.b = 4
In [18]: x.a
Out[18]: 8
好吧,如果你不喜歡的網站,沒有人讓你用它。 – iCodez
我不知道我是否喜歡這個網站,但它有設計上的缺陷,我想鼓勵他們看看。 – user2737835
關於SO本身的評論,建議,投訴等可以發佈在[meta](http://meta.stackoverflow.com/)上。你的問題不是這樣做的地方:它只是噪音。 –