Python中无需每次迭代重写即可自动更新变量间不等式布尔值的方法
问题本质
你遇到的现象是Python的赋值逻辑决定的:你在循环外写cond = b>a时,解释器会当场计算b>a的布尔值,把结果静态赋值给cond变量,后续a、b的值发生变化不会触发cond的自动重计算,所以输出一直是初始的True。
解决方案
方案1:用lambda定义计算逻辑(最简方案)
把cond定义为匿名函数,仅保存b>a的计算规则,调用时才会实时取当前a、b的值计算,不需要每次重写不等式表达式:
a,b = 1,3 cond = lambda: b > a for i in range(3): a += 1 print("a:",a,"b:",b,"cond:",cond())
运行结果:
a: 2 b: 3 cond: True a: 3 b: 3 cond: False a: 4 b: 3 cond: False
仅需要在用到cond的位置加()调用即可,不需要重复写不等式逻辑。
方案2:用@property装饰器实现无括号访问
如果希望cond可以像普通变量一样不用加括号调用,可以封装为类的属性,访问时自动触发计算:
class State: def __init__(self, a, b): self.a = a self.b = b @property def cond(self): return self.b > self.a s = State(a=1, b=3) for i in range(3): s.a += 1 print("a:",s.a,"b:",s.b,"cond:",s.cond)
运行结果和方案1完全一致,适合需要封装多个关联状态的场景。
内容的提问来源于stack exchange,提问作者MVMV
相关产品推荐
相关产品推荐

