在哪里导入模块

时间:2011-10-10 12:27:50

标签: python

假设我有一个名为 device 的模块,其中包含一个名为 ConfigureDevice 的类。还可以说我有一个名为 comports 的模块,它在一个名为 ComPorts 的类中定义了我的com端口(C中的枚举)。

现在,假设 ConfigureDevice 的构造函数采用名为comPorts的参数。问题是,我应该在设备模块的开头导入 comports ,还是应该创建 ConfigureDevice 的代码进行此导入?

那么,导入符号应该出现在这里:

# device module
import serialwriter
import comports

class ConfigureDevice:
    def __init__(self, comPort):
        self.serialWriter = serialwriter.SerialWriter(comPort)

或者我应该在创建ConfigureDevice的代码中导入它,如下所示:

import device
import comports

...

device.ConfigureDevice(comports.ComPorts.COM_1)

1 个答案:

答案 0 :(得分:4)

您通常应该将import放在模块的顶部,Python程序员可以在其中找到它,因为任何导入错误都会在程序启动时发生,而不是在函数发生的时候发生。终于被召唤了。我们通常只将import放在一个函数中,因为(a)我们试图避免在设计错误的模块中进行笨拙的导入循环,或者(b)因为我们想让第三方库可选,所以你只能如果你打电话给那个功能就需要它。

更新:感谢您提供代码示例!除了我最初的建议,import始终位于文件的顶部,我现在还可以建议您从设备模块中删除comport的导入,因为从我看到的,你永远不会在那里使用模块 - 我在设备模块代码中的任何地方都看不到名称comport。通常,如果您尝试从文件中删除import语句但程序仍在运行,则该语句首先不属于该语句。 pyflakes程序可以帮助您查找随着代码的发展而不再有用的import语句。