因此,我正在制作一个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
基本上,我知道可以使用* def random = function(max){ return Math.floor(Math.random() * max) + 1 }
* def index = random(5) + ''
* print index
完成此操作,但我想尽可能避免这样做。有人有什么想法吗?
谢谢!
编辑
感谢帮助人员,我混合了两种建议,现在有了一个既包含列表又包含锁定的类,因此在操作列表时,我可以轻松地锁定和解锁列表。
答案 0 :(得分:2)
您可以尝试将所有回调作为方法放在类中。然后,状态可以是在__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()