Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python 3+中创建自动更新的变量?_Python_Lambda - Fatal编程技术网

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

如何在Python 3+中创建自动更新的变量?,python,lambda,Python,Lambda,代码模型和预期结果: X = 10 Y = (X-10)/2 print(Y) X = 12 print(Y) 我想先打印0,然后打印1,但很明显Y不是动态分配的 我曾尝试使用lambda函数a la Y=lambda I:X-10/2来获得此功能,但我一直在使用 这只是为了避免在任何改变X值的函数末尾运行函数或重新定义Y 提前谢谢 我已经尝试使用lambda函数a la Y=lambda I:X-10/2 您需要调用以下函数: print(Y()) def Y(): return

代码模型和预期结果:

X = 10
Y = (X-10)/2
print(Y)
X = 12
print(Y)
我想先打印0,然后打印1,但很明显Y不是动态分配的

我曾尝试使用lambda函数a la Y=lambda I:X-10/2来获得此功能,但我一直在使用

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

提前谢谢

我已经尝试使用lambda函数a la Y=lambda I:X-10/2

您需要调用以下函数:

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

至于让printY打印更新后的值?大多数情况下是不可能的,而且现有的变通办法根本不值得。只需明确说明如何重新计算该值。

您需要调用lambda:

print(Y())
将lamda分配给变量本质上与定义函数相同:

print(Y())
def Y():
    return (X-10)/2
你不能用普通变量做你想做的事。赋值变量会将值复制到变量中,它不会创建对所用表达式的引用。

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

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

>>> 0.0

要使用lambda表达式赋值,需要调用它。您可以在一行中完成:

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


原因是lambda表达式生成函数,而不是执行函数的结果。

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

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)

使用带有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

这至少解决了无法从print获得响应的问题。Y=lambda i:i-10/2X,但这不允许它以我希望的方式动态更新。有没有办法让它在每次调用变量时都进行计算?@Hyatice实际上取决于您希望计算的参与程度。如果只有两个变量,可以定义Y=lambda i:i-10/2,并通过调用YX获得相应的值。如果您希望有2个以上的简单变量,请考虑使用Symphy Python库进行符号计算:@Hyatice另外,调用YX比使用魔术变量在幕后进行自我更新更显式。您知道Symphy吗?这几乎正是我打算使用它的方式。我想我现在需要重新设计代码的外观来实现这一点,但这给了我一些阅读的机会。非常感谢。