代码模型&预期结果:
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.
提前致谢!
答案 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