Python 轮询数据时避免使用全局变量
Python avoid global variable while polling data
我正在编写一个 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 的建议,现在使用用户数据作为输入(因为 API 支持)。
感谢您的所有回答!
您可以制作一个 class,其中包含所有内容。
这里没有理由使用 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()
我正在编写一个 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 的建议,现在使用用户数据作为输入(因为 API 支持)。 感谢您的所有回答!
您可以制作一个 class,其中包含所有内容。
这里没有理由使用 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()