如何在Python中更新变量中的值?

时间:2019-01-05 02:22:44

标签: python

我希望创建一个变量,当其中的值更改时该变量也会更改。这听起来可能令人困惑。

我是Python的新手,希望在以后的项目中使用它。

这是一个解释。假设我有变量 foo ,我希望它始终等于 bar 加3。

如果我愿意

bar = 6
foo = bar+3

然后 foo 等于9。但是如果我那么做

bar = 5

然后foo仍然是9。我希望foo等于8,而无需执行

foo = bar+3
再次

。我能做些什么来做到这一点吗?

谢谢。

编辑:感谢您的回答!我已经知道变量是如何工作的。我猜想return使用函数是唯一的方法。

4 个答案:

答案 0 :(得分:1)

foo可以这样定义:

foo = lambda: bar + 3

并且可以这样使用:

print(foo())

如您所见,foo不再是变量。 foo是一个函数。 foo不能是变量,因为一个变量不会仅仅因为其他某个变量的值改变而突然改变其值。

答案 1 :(得分:1)

键入时

foo = bar + 3

这并不意味着“ foo等于bar的值三倍,而是“ foo等于{{1}的值三倍} 现在就。”

如果需要使用前者,则需要进行一些欺骗。

bar

但实际上,这只是在幕后起作用。

class DelayedAdditionContext(object):
    def __init__(self, bar=0):
        self.bar = bar

    @property
    def foo(self):
        return self.bar + 3

context = DelayedAdditionContext()
context.bar = 5
context.foo  # 8
context.bar = 8
context.foo  # 11

答案 2 :(得分:0)

定义一个函数来做到这一点:

bar = 6
foo = bar + 3
# bar = 6, foo = 9

def set_bar(v):
    global bar, foo
    bar = v
    foo = bar + 3

set_bar(5)
# bar = 5, foo = 8

据我所知,没有通用的实时监视变量的方法。

请参阅this post(以编程方式面向对象)。

编辑


要实现此目的,您需要定义自己的类型(扩展类型)。

答案 3 :(得分:-1)

我认为您可以使用面向对象的方法在同一类中定义Bar和Foo。如果要获取foo的值,请调用类中的方法以执行foo = bar + 3。我不知道能不能帮您。我是菜鸟。