导入模块/函数的方法有哪些?

2024-04-20 00:15:45 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一个非常基本的问题,但到目前为止,我还没有看到任何涉及所有可能案件的解释。你知道吗

假设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__)你知道吗


Tags: 模块theto函数fromimport命令access
2条回答

另一种导入方式是

import m1.m2.m3 as m

因此可以使用

m.fun()

最重要的是要小心不要覆盖已经存在的东西(污染名称空间)

Version 1

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

如果m1树中的fun是您想要的唯一函数,并且您可以保证脚本中的其他函数都不会被调用fun,那么版本1就是与一起使用的。如果上述任何一项不满意,请不要这样做,如果满意,请这样做。


Version 2

import m1
m1.m2.m3.fun()

如果您希望能够访问m1内的所有内容,那么第2版就是与一起使用的。它确实会导致更冗长的代码,因为您必须始终随身携带m1,但它比对等的from m1 import *更安全,也不那么晦涩。注意m1代码将被执行。你知道吗


Version 3

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

如果您希望能够访问m2内的所有内容,而不是更高的内容(无法执行m1.more_fun()),那么版本3就是您的首选。注意m2代码将被执行。你知道吗


Version 4

from m1.m2 import m3
m3.fun()

如果您希望能够访问m3内的所有内容,而不是更高的内容(无法执行m1.m2.more_fun()),则第4版将与一起使用。注意m3代码将被执行。你知道吗

相关问题 更多 >