当前位置: 代码迷 >> python >> Python在轮询数据时避免全局变量
  详细解决方案

Python在轮询数据时避免全局变量

热度:50   发布时间:2023-06-16 10:16:11.0

我正在编写一个mqtt客户端,该客户端在收集消息数据时会永远循环。

该数组当前是全局数组,但是由于这被认为是不好的做法,因此我想避免这种情况。 但是我不确定如何用另一个参数调用on_message。

如何避免将数组用作全局变量?

   def on_message(client, userdata, msg):
        global array
        array.append(msg.payload)

   array = []
   client = mqtt.Client()
   client.on_connect = on_connect
   client.on_message = on_message
   client.connect("JOHN", 1883, 60)
   client.loop_forever()

编辑:我遵循了CarloLobranos的建议,现在使用userdata作为输入(因为API支持该输入)。 感谢所有答案!

无论如何,这里没有理由使用global关键字,因为您是在对现有列表进行变异。

您可以将所有内容包装在一个函数中:

def mqtt_wrapper():
    array = []
    def on_message(client, userdata, msg):
        array.append(msg.payload)
    client = mqtt.Client()
    client.on_connect = on_connect
    client.on_message = on_message
    client.connect("JOHN", 1883, 60)
    client.loop_forever()

mqtt_wrapper()

您可以创建一个包含所有内容的课程。