例如,如果我说:
a = 50
b = 3 * a
a = 46
此次运行后b的值仍为3 * 50
= 150.如何将b指定为等于3 * a
,这样当更改时,b的值也会发生变化,而不必我再次重申b = 3 * a
?
答案 0 :(得分:3)
您可以创建lambda function。但是,它要求您在每次调用b
后添加空括号。
>>> a = 50
>>> b = lambda: a * 3
>>> b
<function <lambda> at 0xffedb304>
>>> b()
150
>>> a = 45
>>> b()
135
编辑:我已经在这里回答了这种情况:How to create recalculating variables in Python
在同一个线程中给出的另一种方法是创建一个Expression
类,并更改repr
返回。
公平警告:这是一个只适合在Python解释器环境中进行实验和游戏的黑客。请勿将不受信任的输入提供给此代码。
class Expression(object):
def __init__(self, expression):
self.expression = expression
def __repr__(self):
return repr(eval(self.expression))
def __str__(self):
return str(eval(self.expression))
>>> a = 5
>>> b = Expression('a + 5')
>>> b
10
>>> a = 20
>>> b
25
答案 1 :(得分:1)
将b
变为函数:
def b():
return 3 * a
然后通过调用它来使用它,即b()
答案 2 :(得分:-1)
你怎么看待这种方式? :
class XB(object):
def __getattribute__(self, name):
try:
return 3 * a
except:
return None
x = XB()
print 'x.b ==',x.b
a = 50
print 'x.b ==',x.b
a = 46
print 'x.b ==',x.b
返回
x.b == None
x.b == 150
x.b == 138