python中global关键字的作用
python中global关键字的作用
python中初始化一个变量y_axis_RA=[] 一个函数中给y_axis_RA赋值,但是该变量显示未使用,在另外一个函数中使用y_axis_RA提示变量为空
在Python中,变量作用域的问题可能会导致你遇到的情况。如果你在函数外部初始化了一个变量 y_axis_RA=[],然后在函数内部对其进行赋值,你需要确保在函数外部正确地引用了该变量。以下是几个可能的原因和解决方案:
原因1:赋值未正确传播到全局变量
如果你在函数内部给 y_axis_RA 赋值,但没有使用 global 关键字,那么赋值只会影响函数内部的局部变量,而不会影响外部的全局变量。
y_axis_RA = []
def assign_values():
y_axis_RA = [1, 2, 3] # 这里的赋值只影响局部变量
assign_values()
print(y_axis_RA) # 输出 [],因为全局变量未被修改
y_axis_RA = []
def assign_values():
global y_axis_RA # 告诉Python我们想要修改全局变量
y_axis_RA = [1, 2, 3]
assign_values()
print(y_axis_RA) # 输出 [1, 2, 3]
可分析MQTT连接的执行顺序
def on_connect(client, userdata, flags, rc):
print("1")
print("Connected with result code "+str(rc))
client.subscribe(MQTT_TOPIC)
def on_message(client, userdata, msg):
global first_recv_marge_buff
print("2")
try:
first_recv_marge_buff.extend(msg.payload)
if len(first_recv_marge_buff) > MAX_FILE_SIZE:
flag, first_recv_marge_buff = first_data_parse_loop(first_recv_marge_buff)
# print(f"flag: {flag}")
except Exception as e:
print(f"Error processing the message payload: {e}")
# MQTT客户端初始化
client = mqtt.Client(MQTT_CLIENT_ID)
# client = mqtt.Client()
client.username_pw_set(MQTT_USER, MQTT_PASSWORD)
client.on_connect = on_connect
client.on_message = on_message
# 更新画布
def update_canvas(canvas, ax, fig):
try:
data_array = data_queue.get_nowait()
# 清除旧的图形
ax.clear()
pcm = ax.pcolormesh(y_axis_RA[:, 20:-20], x_axis_RA[:, 20:-20], data_array[:, 20:-20], cmap='jet',
shading='flat') # 创建pcolormesh对象
canvas.draw()
except queue.Empty:
pass
# MQTT数据接收线程
def mqtt_data_receiver():
client.connect(MQTT_BROKER, MQTT_PORT, 60)
print("3")
client.loop_forever()
"H:\Program Files\Python\Python311\python.exe" F:\9mqtt\mqtt_python_test\test_new\new9.py
3
1
Connected with result code 0
2
2
2
2
1_frame_idx: 387
2
2
2
2
1_frame_idx: 388
2
2
2
1_frame_idx: 389
2
2
2
2
2
2
1_frame_idx: 390
2
2
2
2
2
1_frame_idx: 391
2
2
2
2
2
2
2
2
2
2
2
1_frame_idx: 393
2
2
2
2
2
1_frame_idx: 394
2
2
2
2
1_frame_idx: 395
2
2
2
1_frame_idx: 396
2
2
进程已结束,退出代码为 0
Error processing the message payload: unpack requires a buffer of 65536 bytes