You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不使用循环时Python变量更新能否触发函数?类似Arduino attachInterrupt功能

答案

结论

Python完全可以实现类似Arduino attachInterrupt()的变量变更触发逻辑,不需要沿用高消耗的循环检测方案。

推荐实现方案

方案1:用@property实现类属性变更监听

适用场景:你要监听的变量可以封装为类成员的场景,无额外性能损耗,变量变更时同步触发回调。
代码示例:

class PersistentVariable:
    def __init__(self, init_value, file_path):
        self._val = init_value
        self.file_path = file_path
        self._write_to_file()

    @property
    def val(self):
        return self._val

    @val.setter
    def val(self, new_val):
        # 仅值发生变化时触发写入
        if new_val != self._val:
            self._val = new_val
            self._write_to_file()

    def _write_to_file(self):
        with open(self.file_path, 'w', encoding='utf-8') as f:
            f.write(str(self._val))

# 使用示例
my_var = PersistentVariable(0, './variable_cache.txt')
my_var.val = 15 # 变量赋值即自动触发写入操作

方案2:观察者模式实现多回调注册

适用场景:需要给单个变量注册多个变更回调,完全对齐Arduino attachInterrupt()的使用逻辑,你可以把回调注册方法理解为Python版的变量变更中断绑定。
代码示例:

class ObservableVariable:
    def __init__(self, init_value):
        self._val = init_value
        self._callback_list = []

    # 对应attachInterrupt功能:注册变更触发的回调函数
    def add_change_callback(self, callback):
        self._callback_list.append(callback)

    @property
    def val(self):
        return self._val

    @val.setter
    def val(self, new_val):
        if new_val != self._val:
            old_val = self._val
            self._val = new_val
            # 触发所有已注册的回调
            for cb in self._callback_list:
                cb(old_val, new_val)

# 写入文件的自定义回调
def save_change(old_val, new_val):
    with open('./change_log.txt', 'a', encoding='utf-8') as f:
        f.write(f"变量更新:{old_val} → {new_val}\n")

# 使用示例
temp_var = ObservableVariable(25)
# 绑定变更回调,和Arduino attachInterrupt逻辑完全一致
temp_var.add_change_callback(save_change)
temp_var.val = 30 # 变更时自动调用save_change写入文件

特殊场景说明

如果你要监听的变量不受你的业务代码控制(比如来自硬件输入、第三方模块的内部变量),才需要考虑轮询方案,此时可以通过调低轮询频率、结合系统级IO事件监听(如select)来降低资源消耗。常规业务场景下上述两种方案就可以满足需求,没有额外的资源开销。

内容的提问来源于stack exchange,提问作者Masterbond7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 07:54:04