我可以在 python 中将参数传递给 paho 回调函数吗?

Can I pass in parameters to paho callback functions in python?

所以我正在制作一个 python 程序来跟踪主题上的 mqtt 连接,这样我就可以拥有一个连接仪表板。我有一个变量,我想将其传递给 on_message 函数,以便我可以修改它并打印出来。

我已经知道我可以通过将变量声明为 global 来创建它,但根据我的经验,无论如何都要避免声明为 global,所以我'我想知道是否有其他方法。

(为了便于阅读,对代码进行了删减)

def process_message(client, userdata, message):
    global connected_list

    # mess around with it and exit the callback


if __name__ == "__main__":
    connected_list = []

    # set up the mosquitto client and then

    client.on_message = process_message

    # tell it to subscribe and connect and then

    client.loop_forever()

基本上我知道它可以用 global 来完成,但如果可能的话我很想避免它。有人有什么想法吗?

谢谢!

编辑

感谢大家的帮助,我结合了这两种建议,现在有了一个包含列表和锁的 class,所以我可以在需要时轻松锁定和解锁列表对其进行操作。

您可以尝试将所有回调作为方法放在 class 中。然后状态可以是在 __init__ 中初始化的变量而不是全局变量。这大大提高了代码的可重用性。

class Handler:

    def __init__(self):
        self.connected_list = []

    def process_message(self, client, userdata, message):
        connected_list = self.connected_list

        # mess around with it and exit the callback


if __name__ == "__main__":
    handler = Handler()

    client.on_message = handler.process_message

    # tell it to subscribe and connect and then

    client.loop_forever()