一尘不染

从...导入或导入...至于模块

python

我应该使用

from foo import bar

要么

import foo.bar as bar

导入模块 ,并和有 改变名字没有必要/愿望bar)?

有什么区别吗?有关系吗?


阅读 114

收藏
2020-12-20

共1个答案

一尘不染

假设bar是中的模块或包foo,没有区别*,那就没关系。这两个语句具有完全相同的结果:

>>> import os.path as path
>>> path
<module 'posixpath' from '/Users/mj/Development/venvs/stackoverflow-2.7/lib/python2.7/posixpath.pyc'>
>>> from os import path
>>> path
<module 'posixpath' from '/Users/mj/Development/venvs/stackoverflow-2.7/lib/python2.7/posixpath.pyc'>

如果bar不是模块或软件包,则第二种形式将不起作用;引发回溯:

>>> import os.walk as walk
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named walk

*在Python 3.6及更高版本中,包含其他模块的软件包的初始化顺序存在一个错误,即在软件包 的加载阶段,import contained.module.something as alias在子模块中使用 该软件包 会失败,from contained.module import something as alias而不会失败。有关该问题以及Python问题#23203#30024的说明性示例

2020-12-20