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

人:

我应该使用

from foo import bar

要么

import foo.bar as bar

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

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

马丁·彼得斯(Martijn Pieters):

假设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的说明性示例,请参见__init__.py中的Imports和“ import as”语句

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章