这是一个非常基本的问题,但到目前为止,我还没有看到任何涉及所有可能案件的解释。你知道吗
假设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__
)你知道吗
另一种导入方式是
因此可以使用
最重要的是要小心不要覆盖已经存在的东西(污染名称空间)
如果
m1
树中的fun
是您想要的唯一函数,并且您可以保证脚本中的其他函数都不会被调用fun
,那么版本1就是与一起使用的。如果上述任何一项不满意,请不要这样做,如果满意,请这样做。如果您希望能够访问
m1
内的所有内容,那么第2版就是与一起使用的。它确实会导致更冗长的代码,因为您必须始终随身携带m1
,但它比对等的from m1 import *
更安全,也不那么晦涩。注意m1
代码将被执行。你知道吗如果您希望能够访问
m2
内的所有内容,而不是更高的内容(无法执行m1.more_fun()
),那么版本3就是您的首选。注意m2
代码将被执行。你知道吗如果您希望能够访问
m3
内的所有内容,而不是更高的内容(无法执行m1.m2.more_fun()
),则第4版将与一起使用。注意m3
代码将被执行。你知道吗相关问题 更多 >
编程相关推荐