我一直在使用python Pyserial API的PySerial库,我似乎无法理解为什么我必须专门导入模块的某个部分。
这会给我一个错误:
import serial
for item in serial.tools.list_ports.comports():
print item
上面的代码片段将返回“AttributeError:type object'Serial'没有属性'tools'”
如果我具体导入该属性,我没有错误:
import serial.tools.list_ports
for item in serial.tools.list_ports.comports():
print item
有人可以帮我理解为什么第一次导入不会运行comports()方法吗?
我知道将较少的项目导入内存是最佳做法,但我也使用PySerial模块中的其他方法。导入serial和serial.tools.list_ports似乎是多余的。
答案 0 :(得分:1)
导入serial
将导致创建模块创建的所有名称。在你意识到serial
没有在其中创建任何称为“工具”的属性之前,这听起来是不言而喻的。这实际上是一个单独的模块。
import
您是否赞成导入父模块,这就是导入serial.tools.list_ports
也导入serial.tools
的原因。它也导入serial
,但你应该明确地导入它,而不是让Python偶然为你做。
>>> import this
The Zen of Python, by Tim Peters
...
Explicit is better than implicit.
...