Python架构导入额外的模块,还是在代码执行部分导入模块?

2024-05-08 06:46:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个模块,它定义了一个从两个(或更多)其他模块中实例化一个类的类。下面是几个代码示例。在第一个示例中,导入了两个模块,但只使用了一个模块(每个MyIo实例一个)。在第二个示例中,只导入所需的模块。在更高级别的模块中可能有一个或多个MyIo实例。在

我喜欢第二个示例只导入使用的内容,但我不太喜欢import发生在“代码执行”部分。在

我的问题是:

  1. 哪个例子是更好的架构选择,为什么?在
  2. 如果导入的模块最终不是 用过吗?在
  3. Python代码执行部分的导入是否被认为是“错误的形式”在

这个例子导入两个模块,但只使用一个。。。在

''' MyIo.py '''

...
...
from DevSerial import Device as DeviceSerial
from DevUSB import Device as DeviceUSB

class MyIo:

  def __init__(self, port)
    if port.lower() == 'usb':
      self.device=DeviceUSB()
    else:
      self.device=DeviceSerial(port)
...
...

以下仅导入正在使用的模块。。。在

^{pr2}$

Tags: 模块实例fromimportself示例portdevice
3条回答

根据PEP 8,所有导入都应该放在文件的顶部。将它们分散在整个文件中会导致难以维护和调试软件。在

我能想到的唯一性能开销是在程序启动时——它必须加载更多的模块。一旦程序运行,就不应该有任何额外的开销。在

回答您的问题:

  1. 前者。很明显,使用的是其他文件,而您必须挖掘第二个文件以找到所有依赖项。在
  2. 是的,但只在刚起步的时候。在
  3. 是的。在

实际上,即使您将模块导入到函数中,它们仍将存在于系统模块一旦你的功能完成执行,除非你手动删除它们。所以,不直接在代码的顶部导入它们是没有意义的(比如示例1)。在

对于不只是在页面顶部卡住的导入,最常见的用法是在同级模块代表不同的、互斥的选项的情况下:最好的例子是操作系统路径,它将自动交换为相应的模块。在上面和下面的代码中做上下的比较。在

相关问题 更多 >