导入模块/功能的方式有哪些?

时间:2018-12-12 08:54:53

标签: python function main python-module

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

假设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__?)

2 个答案:

答案 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是附带的版本,如果funm1中唯一需要的功能,并且您可以保证脚本中没有其他函数将被称为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代码将被执行。