我已经看到了一些蟒蛇的程序员,使用下面的样式相当一致(我们称它式1):

import some_module
# Use some_module.some_identifier in various places.

为支持这种风格的,可以举 "明确的是更好的比隐含的" 马克西姆。我已经看到其他的编程人员使用这种风格(风格2):

from some_module import some_identifier
# Use some_identifier in various places.

主要的好处,我看到的风格2的是维护--特别是与 鸭打字 理想我可能要交换some_module为some_other_module.我还觉得样式2的胜点 "可读性很重要" 马克西姆。尽管我倾向于同意,一个可以始终认为,搜查和替换,只是作为良好的一个选项时使用的第一个风格。

增编: 据指出,可以使用 as 为了解决开关 some_modulesome_other_module 在风格1中。我忘了提及,这也是共同决定的执行 some_identifier 在你 电流 模块,这使得建立一个等效 some_module 容器略尴尬。

有帮助吗?

解决方案

有采用为这两种情况下,所以我不认为这是一个非此即彼的问题。我会考虑使用的模块 import x,y,z 当:

  • 有一个相当小的多的事情要进口

  • 目的功能,进口是明显的时候离婚的模块名称。如果名字是相当一般,它们可能与冲突其他人,告诉你点。例如。看到 remove 告诉你个小,但是 os.remove 可能会暗示你正在处理的文件。

  • 名字不发生冲突。与上述相似,但更加重要。 从来没有 做喜欢的东西:

     from os import open
    

import module [as renamed_module] 具有的优点在于它给多一点下文关于什么是被称为当你使用它。它具有的缺点是,这是一个比较杂乱时该模块是不是真的给予更多的信息,并略低性能(2查找,而不是1)。

它还具有优点,当测试,但是(如。替换操作系统。打开一个模拟对象,而不必改变每个模块),并应使用当使用可变的模块,例如

import config
config.dburl = 'sqlite:///test.db'

如果有疑问,我总是会去的 import module 风格。

其他提示

存在以下语法:

import some_other_module as some_module

样式2的可维护性参数不再相关。

我倾向于使用样式1.通常,我发现在典型的Python程序中我只显式引用了几次导入的包名。其他一切都是对象上的方法,当然不需要引用导入的包。

我通常使用阈值来决定这一点。如果我想在 some_module 中使用很多东西,我会使用:

import some_module as sm
x = sm.whatever

如果我只需要一两件事:

from some_module import whatever
x = whatever

当然,假设我不需要 some_other_module 中的

我倾向于在导入时使用 as 子句,以便我可以在将来轻松地减少输入替换另一个模块。

我更喜欢 import X ,然后尽可能使用 X.a

我的例外以Django这样的大框架中的深层嵌套模块为中心。他们的模块名称往往变得冗长,他们的例子都说来自django.conf导入设置的,以节省你在任何地方输入 django.conf.settings.DEBUG

如果模块名称是深层嵌套的,那么例外是使用X.Y.Z中的导入

我发现了符号

from some_module import some_symbol

在大多数情况下效果最佳。此外,如果符号出现名称冲突,您可以使用:

from some_module import some_symbol as other_symbol

正如问题所述,它避免了一直重写模块名称,每次都有冒充错误的风险。我使用语法:

import  module [as other_module]

仅在两种情况下:

  1. 我使用了太多的模块函数/对象来导入它们
  2. 模块定义了一些可能在执行期间更改的符号

我个人尽量不要过多地使用我的命名空间,所以在大多数情况下我只是做

import module  

或     导入模块为mod

只有真正的差异才是我有一个单独使用过很多类的模块。如果我已经将 list 类型转换为在那里添加一些功能,我会使用

from SuperImprovedListOverloadedWithFeatures import NewLIst
nl = NewList()

我倾向于只使用每个模块的几个成员,因此有很多

from john import cleese
from terry import jones, gilliam

在我的代码中。如果我希望使用大部分模块并且模块名称很短,我将导入整个模块(例如 os wx )。如果存在名称冲突,我也会导入整个模块,或者我想提醒读者与该功能相关联的内容。

import michael
import sarah

import wave

gov_speech = wave.open(sarah.palin.speechfile)
parrot_sketch = wave.open(michael.palin.justresting)

(我可以使用波形导入中的打开wave_open ,但我认为读者会更熟悉 wave.open

我相信更新版本的Python(2.5+?必须检查我的事实......)你甚至可以这样做:

import some_other_module as some_module

所以你仍然可以使用样式1并稍后交换不同的模块。

我认为它通常会映射到您希望混淆命名空间的程度。你会在模块中使用一个或两个名字吗?或者所有这些( from x import * 并不总是坏的,只是一般)?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top