如何在Python 3+中创建自动更新的变量?

时间:2017-08-08 19:26:21

标签: python lambda

代码模型&预期结果:

X = 10
Y = (X-10)/2
print(Y)
X = 12
print(Y)

我希望打印“0”然后打印“1”,但显然Y不会动态分配。

我尝试过使用lambda函数(la Y = lambda i: (X-10)/2)来获得此功能,但我不断获得<function <lambda> at 0x7f5f6356eea0>

这只是为了避免在任何改变X值的函数结束时运行函数或重新定义Y.

提前致谢!

6 个答案:

答案 0 :(得分:1)

或者,您也可以使用属性:

class P:
    def __init__(self,x):
        self.x = x
        self.y = y

    @property
    def x(self):
        return self.__x

    @property
    def y(self):
        return (self.__x-10)/2

    @x.setter
    def x(self, x):
        self.__x = x

但是,您必须通过P类的实例访问这些值。

p = P()
p.x = 10
print(p.y)
p.x = 12
print(p.y)

答案 1 :(得分:0)

  

我尝试过使用lambda函数(la Y = lambda i: (X-10)/2)

您需要调用该函数:

print(Y())

print(Y)打印更新后的值?最不可能的是,存在哪些变通方法并不值得。只需明确重新计算价值。

答案 2 :(得分:0)

你需要调用lambda:

print(Y())

将lamda分配给变量与定义函数基本相同:

def Y():
    return (X-10)/2

你不能用普通变量做你想做的事。分配变量会将值复制到其中,它不会创建对所使用的表达式的引用。

答案 3 :(得分:0)

您需要为lambda函数提供 x 参数。在你的情况下,这是10或12.

y = lambda x: (x-10)/2
print(y(10))

>>> 0.0

答案 4 :(得分:0)

要使用lambda表达式分配值,您需要调用它。您可以在一行

中执行此操作
Y = (lambda i: (i-10)/2)(X)

无需定义其他类或函数,只需添加括号和参数即可。

你得到<function <lambda> at 0x7f5f6356eea0>的原因是lambda表达式产生一个函数,而不是执行函数的结果。

答案 5 :(得分:0)

使用带有dict的lambda来跟踪它:

>>> vars={}
>>> vars['x']=10
>>> vars['y']=lambda :(vars['x']-10.0)/2.0
>>> vars['y']()
0.0
>>> vars['x']=12.0
>>> vars['y']()
1.0