这是一个非常基本的问题,但是到目前为止,我还没有看到关于所有可能情况的任何解释。
假设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()
或两者之间是否还有其他组合?有相对优势还是劣势?显然,我想在每次调用函数时都写fun()
而不是写m1.m2.m3.fun()
,但是有什么折衷办法?
据我了解,版本2将执行m1的整个脚本。但是其他人在执行方面是否更具选择性(从而可能更快地进入__main__
?)
答案 0 :(得分:2)
另一种导入方式是
import m1.m2.m3 as m
因此您可以使用
调用该函数m.fun()
最重要的注意事项是不要覆盖已经存在的内容(污染名称空间)
答案 1 :(得分:2)
版本1
from m1.m2.m3 import fun fun() #To access the function
版本1是附带的版本,如果fun
是m1
树中唯一需要的功能,并且您可以保证脚本中没有其他函数将被称为fun
。如果上述任何一项都不满意,请不执行,但是如果满足,请执行。
版本2
import m1 m1.m2.m3.fun()
第2版是附带的版本,如果您希望能够访问m1
内的一切。确实会导致更冗长的代码,因为您必须一直随身携带m1
,但是与等效的from m1 import *
相比,它更安全且晦涩难懂。请注意,m1
代码将被执行。
版本3
import m1.m2 m1.m2.m3.fun()
第3版是附带的版本,如果您希望能够访问m2
内的一切但不能访问更高版本(不能执行{{1} }。请注意,m1.more_fun()
代码将被执行。
版本4
m2
第4版是附带的版本,如果您希望能够访问from m1.m2 import m3
m3.fun()
内的一切但不能访问更高版本(不能执行{{1} }。请注意,m3
代码将被执行。