gpt4 book ai didi

python - python中变量变化的回调

转载 作者:太空宇宙 更新时间:2023-11-03 13:58:45 24 4
gpt4 key购买 nike

我找遍了,但没有找到这样的东西。假设我有一群线程,它们不断读取和更新整数变量 x。当 x 变化超过一定幅度(比方说 500)时,我想要一个回调来运行回调。

如何在不给系统带来沉重负担的情况下做到这一点,比如让一个线程具有 while true 并检查变量是否已更改?性能至关重要。但道德也是如此。

在普通代码中会是这样的:

x = 10
def runMe():
print('Its greater than 500!!')

def whenToRun():
return x >= 500

triggers.event(runMe, whenToRun)

最佳答案

您想要一个函数(“setter”),只要变量的值发生变化,它就会被调用。一个好的方法是定义一个 @property。它将表现得像一个变量,但会有一个getter 函数和一个setter 函数。

然后,在 setter 中,调用您需要的任何回调,这将对更改使用react。

这应该可以解决问题:

class ObjectHoldingTheValue:
def __init__(self, initial_value=0):
self._value = initial_value
self._callbacks = []

@property
def value(self):
return self._value

@value.setter
def value(self, new_value):
old_value = self._value
self._value = new_value
self._notify_observers(old_value, new_value)

def _notify_observers(self, old_value, new_value):
for callback in self._callbacks:
callback(old_value, new_value)

def register_callback(self, callback):
self._callbacks.append(callback)

然后,您可以:

def print_if_change_greater_than_500(old_value, new_value):
if abs(old_value - new_value) > 500:
print(f'The value changed by more than 500 (from {old_value} to {new_value})')

holder = ObjectHoldingTheValue()
holder.register_callback(print_if_change_greater_than_500)
holder.value = 7 # nothing is printed
holder.value = 70 # nothing is printed
holder.value = 700 # a message is printed

关于python - python中变量变化的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51885246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com