我试图理解为什么在某些代码中通常先导入模块,然后再从模块中导入特定成员的方法。
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
答案 0 :(得分:2)
是否纯粹出于懒惰而不必写
module_a.member_a
而是直接访问member_a
?
本质上是,它允许使用spinup
和spinup.foo
来使用spinup.Bar
中的任何函数或类。在大多数情况下,主观上最好使用spinup.foo
方法,因为通过这种方法可以很清楚地从所使用的函数定义位置开始。
此技术还允许使用ExperimentGrid
,而无需每次使用时都指定spinup.utils.run_utils.ExperimentGrid
。
当使用type annotations时,这对于类/类型特别有用:
def foo(param: ExperimentGrid) -> ExperimentGrid:
比
干净得多def foo(param: spinup.utils.run_utils.ExperimentGrid) -> spinup.utils.run_utils.ExperimentGrid: