为什么在 "import <module>" 之后使用 "from <module> import <something>"?

Why use "from <module> import <something>" after "import <module>"?

我试图理解为什么在某些代码中,通常的做法是先 导入模块,然后再从模块中导入特定成员

import module_a
from module_a import member_a

是否只是出于纯粹的懒惰而不必编写module_a.member_a而是直接访问member_a

这是代码片段我的问题来自:

import spinup
from spinup.utils.run_utils import ExperimentGrid
from spinup.utils.serialization_utils import convert_json

Is it just out of pure laziness to not have to write module_a.member_a and instead access member_a directly?

本质上是的,它允许使用 spinup 中的任何函数或 类,以及 spinup.foospinup.Bar。大多数时候使用 spinup.foo 方式在主观上更可取,因为这样可以从定义您使用的函数的位置非常清楚。

此技术还允许使用 ExperimentGrid,而无需在每次使用时指定 spinup.utils.run_utils.ExperimentGrid。 当使用 type annotations:

时,这对 classes/types 特别有用
def foo(param: ExperimentGrid) -> ExperimentGrid:

干净多了
def foo(param: spinup.utils.run_utils.ExperimentGrid) -> spinup.utils.run_utils.ExperimentGrid: