Python将变量更改为分配给变更的变量

时间:2013-12-29 23:36:08

标签: python

例如,如果我说:

a = 50
b = 3 * a
a = 46

此次运行后b的值仍为3 * 50 = 150.如何将b指定为等于3 * a,这样当更改时,b的值也会发生变化,而不必我再次重申b = 3 * a

编辑:我会搜索一下,但我真的不确定如何说出来。

3 个答案:

答案 0 :(得分:3)

使用lambda函数

您可以创建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