"从xy import z"和"import xyz as z"之间的区别

Vel*_*vix 14 python python-import

在您想要将嵌套模块导入命名空间的情况下,我总是这样写:

from concurrent import futures
Run Code Online (Sandbox Code Playgroud)

但是,我最近意识到这也可以使用"as"语法来表达.请参阅以下内容:

import concurrent.futures as futures
Run Code Online (Sandbox Code Playgroud)

这与其他进口看起来更相似的主观优势:

import sys
import os
import concurrent.futures as futures
Run Code Online (Sandbox Code Playgroud)

......具有增加冗长的缺点.

两者之间是否存在功能差异,或者是PEP中的官方首选还是其他?

use*_*ica 7

有一些功能差异.首先,正如评论中已经提到的,import package.thing as thing需要thing是一个模块(或子包,实际上并不是一个单独的案例,因为包计为模块).

其次,在Python 3.5及更高版本中,如果from package import thing发现模块对象package没有thing属性,它将尝试查找sys.modules['package.thing']为后备.添加它是为了处理某些循环相对导入的情况.import package.thing as thing还没有执行此操作,但它在Python 3.7.