为何Python中看似冗余的paho导入语句必需?如何简化导入?
问题解答
为什么注释掉第2行代码会执行失败?
在Python里,导入顶层模块(比如import paho)并不会自动加载它的所有子模块。paho.mqtt和paho.mqtt.client都是paho的嵌套子模块,只有当你显式导入它们时,Python才会把这些子模块加载到内存,并挂载到父模块的命名空间中。
你只写import paho时,paho模块里并没有mqtt这个属性——因为paho.mqtt还没被加载。这时候直接访问paho.mqtt.client.Client会触发AttributeError,Python找不到这个子模块。而import paho.mqtt.client这行代码会递归加载paho.mqtt和paho.mqtt.client,把它们挂载到paho的命名空间下,这样后续才能正常访问嵌套的类和枚举。
如何缩短调用名称?
有几种简洁的写法可以避免重复写长路径:
方式1:导入paho.mqtt并取别名
import paho.mqtt as mqtt client = mqtt.client.Client(mqtt.enums.CallbackAPIVersion(2))
方式2:直接导入需要的类和枚举
from paho.mqtt.client import Client from paho.mqtt.enums import CallbackAPIVersion client = Client(CallbackAPIVersion(2))
方式3:导入子模块并取别名
from paho.mqtt import client as mqtt_client from paho.mqtt import enums as mqtt_enums client = mqtt_client.Client(mqtt_enums.CallbackAPIVersion(2))
这几种方式都能有效缩短代码长度,同时保证功能正常。
内容的提问来源于stack exchange,提问作者Paul Jurczak
相关产品推荐
相关产品推荐

