我应该使用
from foo import bar
要么
import foo.bar as bar
当 导入模块 ,并和有 改变名字没有必要/愿望 (bar)?
bar
有什么区别吗?有关系吗?
假设bar是中的模块或包foo,没有区别*,那就没关系。这两个语句具有完全相同的结果:
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的说明性示例
import contained.module.something as alias
from contained.module import something as alias