【问题标题】:Python avoid global variable while polling dataPython在轮询数据时避免使用全局变量
【发布时间】:2017-02-16 14:01:47
【问题描述】:

我正在写一个 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 支持)。 感谢所有答案!

【问题讨论】:

  • 我不是 mqtt 专家,但简单看一下文档,答案似乎就在那个 userdata 变量中
  • @CarloLobrano 谢谢,这就像一个魅力!在调用这些函数之前,可以像结构体一样设置用户数据

标签: python global-variables publish-subscribe


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2012-12-19
        • 1970-01-01
        • 2016-01-06
        • 2012-05-04
        • 1970-01-01
        • 1970-01-01
        • 2020-09-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多