|
|
1
102
从长远来看,我认为您会喜欢将大部分导入放在文件的顶部,这样您就可以通过需要导入的内容一目了然地知道模块有多复杂。 如果我要向现有文件中添加新代码,我通常会在需要的地方进行导入,如果代码保持不变,我会将导入行移到文件顶部,从而使内容更持久。
我用
|
|
|
2
51
|
|
|
3
20
下面是我们使用的四个导入用例
下面是我们为使代码更清晰所做的:
|
|
|
4
9
要记住一件事:不必要的导入可能会导致性能问题。因此,如果这是一个经常调用的函数,那么最好将导入放在顶部。当然是这个 如果您正在使用IronPython,我被告知最好导入内部函数(因为在IronPython中编译代码可能会很慢)。因此,您可能能够找到一种导入内部函数的方法。但除此之外,我认为不值得与传统作斗争。
我想说的另一点是,这可能是一个潜在的维护问题。如果您添加的函数使用的模块以前仅由一个函数使用,会发生什么情况?您是否记得将导入添加到文件的顶部?还是要扫描每个函数以获取导入?
FWIW,在某些情况下,在函数内部导入是有意义的。例如,如果要在cx_Oracle中设置语言,则需要设置NLS
|
|
|
5
6
我以前打破过这条规则,用于自我测试的模块。也就是说,它们通常只是用于支持,但我为它们定义了一个main,这样,如果您自己运行它们,就可以测试它们的功能。在这种情况下,我有时会导入
|
|
|
6
5
来自于关于 loading the module twice -为什么不能两者兼而有之? 脚本顶部的导入将指示依赖项,函数中的另一个导入将使此函数更原子化,同时似乎不会造成任何性能缺点,因为连续导入成本较低。 |
|
|
7
4
看看sqlalchemy中使用的替代方法:依赖项注入:
注意导入的库是如何在装饰器中声明和传递的 作为函数的参数 !
快4.5倍
比
基准: https://gist.github.com/kolypto/589e84fbcfb6312532658df2fabdb796 |
|
|
8
4
还有另一个(可能是“角落”)案例,它可能有益于
有一次,我在一个小型物联网服务器上运行了一个相当复杂的程序,接受串行线路的命令并执行操作,可能是非常复杂的操作。
放置
OTOH将大多数导入放在函数中,我能够在几秒钟内让服务器在串行线上“活动”。当然,当实际需要模块时,我必须付出代价(注意:这也可以通过生成一个后台任务来减轻)
|
|
|
9
3
只要是
这没什么大不了的,但既然几乎没有区别,我建议按照PEP8的说法去做。 |
|
|
10
2
在属于“正常”模块且可执行的模块中(即具有
|