我希望创建一个变量,当其中的值更改时该变量也会更改。这听起来可能令人困惑。
我是Python的新手,希望在以后的项目中使用它。
这是一个解释。假设我有变量 foo ,我希望它始终等于 bar 加3。
如果我愿意
bar = 6
foo = bar+3
然后 foo 等于9。但是如果我那么做
bar = 5
然后foo仍然是9。我希望foo等于8,而无需执行
foo = bar+3
再次。我能做些什么来做到这一点吗?
谢谢。
编辑:感谢您的回答!我已经知道变量是如何工作的。我猜想return
使用函数是唯一的方法。
答案 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。我不知道能不能帮您。我是菜鸟。