module/function的导入方式有哪些?
What are the ways to import a module/function?
这是一个非常基本的问题,但到目前为止我还没有看到涵盖所有可能情况的任何解释。
假设m1, m2, m3
是模块层级,fun()
是层级内部的一个函数。
我见过像
这样的命令
Version 1
from m1.m2.m3 import fun
fun() #To access the function
Version 2
import m1
m1.m2.m3.fun()
它们是否完全等同于
Version 3
import m1.m2
m1.m2.m3.fun()
或
Version 4
from m1.m2 import m3
m3.fun()
或者两者之间的任何其他组合?有什么相对优势或劣势吗?显然,我宁愿在每次调用函数时写 fun()
而不是写 m1.m2.m3.fun()
但权衡是什么?
据我了解,版本 2 将执行 m1 的整个脚本。但是其他人在执行时是否更具选择性(因此可能更快地到达 __main__
?)
另一种导入方式是
import m1.m2.m3 as m
因此您可以使用
调用该函数
m.fun()
要注意的最重要的事情是不要覆盖已经存在的东西(污染命名空间)
Version 1
from m1.m2.m3 import fun
fun() #To access the function
版本 1 是 如果 fun
是您想要从 m1
树 和 你可以保证你的脚本中的任何其他函数都不会被调用 fun
。如果以上任何一项不满足不做,但如果满足,做。
Version 2
import m1
m1.m2.m3.fun()
版本 2 是 如果 您希望能够访问 m1
中的 一切 的版本。它确实会导致更冗长的代码,因为您必须始终随身携带 m1
,但它比等价物(不鼓励使用)from m1 import *
更安全且更隐蔽。请注意,m1
代码将被执行。
Version 3
import m1.m2
m1.m2.m3.fun()
第 3 版是 如果 您希望能够访问 m2
中的 一切 而不是更高(不能做到 m1.more_fun()
)。请注意,将执行 m2
代码。
Version 4
from m1.m2 import m3
m3.fun()
第 4 版是 如果 您希望能够访问 m3
中的 所有内容 而不是更高(不能做到 m1.m2.more_fun()
)。请注意,将执行 m3
代码。
这是一个非常基本的问题,但到目前为止我还没有看到涵盖所有可能情况的任何解释。
假设m1, m2, m3
是模块层级,fun()
是层级内部的一个函数。
我见过像
这样的命令Version 1
from m1.m2.m3 import fun fun() #To access the function
Version 2
import m1 m1.m2.m3.fun()
它们是否完全等同于
Version 3
import m1.m2 m1.m2.m3.fun()
或
Version 4
from m1.m2 import m3 m3.fun()
或者两者之间的任何其他组合?有什么相对优势或劣势吗?显然,我宁愿在每次调用函数时写 fun()
而不是写 m1.m2.m3.fun()
但权衡是什么?
据我了解,版本 2 将执行 m1 的整个脚本。但是其他人在执行时是否更具选择性(因此可能更快地到达 __main__
?)
另一种导入方式是
import m1.m2.m3 as m
因此您可以使用
调用该函数m.fun()
要注意的最重要的事情是不要覆盖已经存在的东西(污染命名空间)
Version 1
from m1.m2.m3 import fun fun() #To access the function
版本 1 是 如果 fun
是您想要从 m1
树 和 你可以保证你的脚本中的任何其他函数都不会被调用 fun
。如果以上任何一项不满足不做,但如果满足,做。
Version 2
import m1 m1.m2.m3.fun()
版本 2 是 如果 您希望能够访问 m1
中的 一切 的版本。它确实会导致更冗长的代码,因为您必须始终随身携带 m1
,但它比等价物(不鼓励使用)from m1 import *
更安全且更隐蔽。请注意,m1
代码将被执行。
Version 3
import m1.m2 m1.m2.m3.fun()
第 3 版是 如果 您希望能够访问 m2
中的 一切 而不是更高(不能做到 m1.more_fun()
)。请注意,将执行 m2
代码。
Version 4
from m1.m2 import m3 m3.fun()
第 4 版是 如果 您希望能够访问 m3
中的 所有内容 而不是更高(不能做到 m1.m2.more_fun()
)。请注意,将执行 m3
代码。