【问题标题】:not able to use a variable as a global variable in python [duplicate]无法在python中使用变量作为全局变量[重复]
【发布时间】:2020-01-02 22:54:05
【问题描述】:

我有一个通过 python 连接的 mqtt 代理。

我想检查我是否能够连接到我的代理并在连接成功时触发邮件。

我打算使用全局变量connected,如果在尝试连接后这是错误的,我会触发警报。

我的代码:

import paho.mqtt.client as mqtt 
import time

broker_address="ip"
port = "port"

global connected


def mqttConnection():
    connected = False
    print(connected)
    client = mqtt.Client("BrokerCheck",clean_session=True) #create new instance
    client.on_connect = on_connect
    print('Connecting to broker')
    client.connect(broker_address, port=port) #connect to broker

def on_connect(client, userdata, flags, rc):
    if rc==0:
        print("connected OK Returned code=",rc)
        connected = True
    else:
        print("Bad connection Returned code=",rc)



if __name__ == '__main__':
    mqttConnection()
    time.sleep(60)
    if connected:
        pass
    else:
        #trigger an alarm

但我的全局变量已连接有问题。我是否以正确的方式使用它?

【问题讨论】:

  • connected 的赋值会创建一个局部变量,它会在mqttConnection 定义的范围内隐藏同名的全局变量。

标签: python python-3.x mqtt paho messagebroker


【解决方案1】:

你可以在你的情况下做这样的事情:

x = 1
def foo(y):
  global x
  # Changing x locally will change the global value
  print(x)

【讨论】:

    【解决方案2】:

    您需要在要分配给它的每个函数的范围内将变量指定为全局变量。例如:

    connected = None
    
    def mqttConnection():
        global connected
        connected = False
        print(connected)
        client = mqtt.Client("BrokerCheck",clean_session=True) #create new instance
        client.on_connect = on_connect
        print('Connecting to broker')
        client.connect(broker_address, port=port) #connect to broker
    
    def on_connect(client, userdata, flags, rc):
        global connected
        if rc==0:
            print("connected OK Returned code=",rc)
            connected = True
        else:
            print("Bad connection Returned code=",rc)
    

    基本上,python 函数能够读取函数外部声明的任何变量,但是一旦该函数 分配 给变量,就会在局部范围内创建一个新变量,该变量会覆盖全局范围内的变量范围。 global 操作禁用此功能,并允许您分配给实际的全局变量,而不是创建一个新变量。

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 2015-08-19
      • 1970-01-01
      • 2022-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-24
      • 2012-01-31
      相关资源
      最近更新 更多