Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python在轮询数据时避免使用全局变量_Python_Global Variables_Publish Subscribe - Fatal编程技术网

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

Python在轮询数据时避免使用全局变量,python,global-variables,publish-subscribe,Python,Global Variables,Publish Subscribe,我正在编写一个mqtt客户机,它在收集消息数据时一直循环 阵列当前是全局的,但由于这被认为是不好的做法,我希望避免这种情况。但是,我不知道如何使用另一个参数调用_消息 如何避免使用数组作为全局变量 def on_message(client, userdata, msg): global array array.append(msg.payload) array = [] client = mqtt.Client() client.on_

我正在编写一个mqtt客户机,它在收集消息数据时一直循环

阵列当前是全局的,但由于这被认为是不好的做法,我希望避免这种情况。但是,我不知道如何使用另一个参数调用_消息

如何避免使用数组作为全局变量

   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支持这一点)。
谢谢你的回答

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

无论如何,这里没有理由使用全局关键字,因为您正在修改现有列表。

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

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()

我不是mqtt专家,但简单看一下文档,答案似乎就在
userdata
variable@CarloLobrano谢谢,这很有魅力!在调用这些函数之前,可以像结构一样设置userdata