首页 文章

导入 module/function 的方法有哪些?

提问于
浏览
3

这是一个非常基本的问题,但到目前为止我还没有看到任何解释所有可能情况的解释。

假设m1, m2, m3是模块层次结构,fun()是层次结构内的函数。

我见过像这样的命令

版本 1

from m1.m2.m3 import fun
fun() #To access the function

版本 2

import m1
m1.m2.m3.fun()

它们完全相同吗?

版本 3

import m1.m2
m1.m2.m3.fun()

要么

版本 4

from m1.m2 import m3
m3.fun()

或任何其他组合 in-between?有任何相对优势或劣势吗?显然,我更愿意在每次调用函数时写fun()而不是写m1.m2.m3.fun()但是什么是权衡?
根据我的理解,版本 2 将执行 m1 的整个脚本。但其他人在执行方面是否更具选择性(因此可能会更快地进行__main__?)

2 回答

  • 2

    版本 1

    from m1.m2.m3 import fun
    fun() #To access the function
    

    版本 1 是与一起使用的如果**fun是你想要的唯一函数来自m1树****你可以保证脚本中的其他函数都不会被称为fun.如果上述任何一项不满意不要这样做,但如果是,就这样做.


    版本 2

    import m1
    m1.m2.m3.fun()
    

    如果你希望能够在m1内访问所有**,那么版本 2 就是**。它确实导致了更详细的代码,因为你必须随身携带m1,但它更安全,而且不那么模糊等同(应该不鼓励)from m1 import *。请注意,将执行m1代码。


    版本 3

    import m1.m2
    m1.m2.m3.fun()
    

    版本 3 是与一起使用如果你希望能够访问m2里面的所有内容**但不高(不能做m1.more_fun())。请注意,将执行m2代码。


    版本 4

    from m1.m2 import m3
    m3.fun()
    

    如果你希望能够访问m3里面的所有但不高(不能做m1.m2.more_fun()),那么版本 4 就是。请注意,将执行m3代码。

  • 2

    另一种导入方式是

    import m1.m2.m3 as m
    

    因此你可以调用函数

    m.fun()
    

    最重要的一点是不要覆盖已存在的东西(污染命名空间)

相关问题