导入python模块的特殊性?

时间:2014-08-12 21:40:19

标签: python import module serial-port pyserial

我一直在使用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似乎是多余的。

1 个答案:

答案 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.
 ...