【python】关于python中模块导入的总结

precondition:比如我有如下这样的文件目录结构

说明:add和debug两个包都隶属于src目录,它们是同级目录,其中在add路径下有一个add.py的模块,里面定义了一个jiafa()的函数,实现两数相加并输出总和。

现在要实现如下几个调用功能:

1、在debug2文件实现直接调用add模块进行求和

2、在debug1文件中实现调用add模块进行求和

注意:要实现一个模块要能被另外其它模块正常调用,则在对应模块所在的文件夹下新建一个__init__.py的空文件(这个文件作用就是表示当前该文件夹为一个包,只有是包才能被其它模块所调用)

add.py文件中定义了一个jiafa()的函数,代码如下:

1 #-*- coding:utf-8 -*-
2 '''
3 Created on 2018年7月21日
4 
5 @author: lenovo
6 '''
7 def jiafa(a,b):
8     print "a + b is:",a + b
9     return a + b

一、下面介绍实现第一个功能方法如下,在debug2.py文件中这样进行调用

1 #-*- coding:utf-8 -*-
2 '''
3 Created on 2018年7月21日
4 
5 @author: lenovo
6 '''
7 import add
8 
9 print add.jiafa(11, 22)

输出:

a + b is: 33
33

总结:如果是在同一个包里面(也就是同一级目录),如果要调用其它模块的话,可以在程序中直接使用 “import 模块名”即可,例如上例中 import add

二、下面介绍第二个功能的实现方法,在debug1文件中可以使用这三种方法进行调用:

方法1、

1 #-*- coding:utf-8 -*-
2 '''
3 Created on 2018年7月21日
4 
5 @author: lenovo
6 '''
7 from add.add import jiafa
8 print jiafa(1, 4)

输出如下

a + b is: 5
5

总结1:模块间相互调用且不在同一个包里面(不在同一级目录),则使用 ”from 包名.模块名 import 函数名“,如果要调用多级目录里面的话(前提是每一级目录里面都要新增这个__init__.py的空文件),就这样 "from xxxx.xxx.xx.x import yy",例如上例中的 ”from add.add import jiafa“

方法2、

1 #-*- coding:utf-8 -*-
2 '''
3 Created on 2018年7月21日
4 
5 @author: lenovo
6 '''
7 from add.add import *
8 print jiafa(2, 4)

输出如下:

a + b is: 6
6

总结2:在实际应用中,一个模块文件中不可能就只放一个函数,这样就像上面”总结1“里面的方法有个缺陷,如果要使用同一个模块里面其它函数的话,则又要重新导入一次要使用的函数,很麻烦,为了省事,就可以这样 "from xxx.xx.x import * ",用 * 号代表模块文件x中所有的函数,这样就可以全部导入进来

方法三、

1 #-*- coding:utf-8 -*-
2 '''
3 Created on 2018年7月21日
4 
5 @author: lenovo
6 '''
7 import add.add
8 sum = add.add.jiafa(3,4)
9 print sum

输出如下:

a + b is: 7
7

总结3:该方法跟第一个功能一样,只不过一个是在同级目录,一个是在不同目录里面。

写在最末尾:在实际编码过程中,为了统一编码规范,在导入第三方模块时,上面import xx 和 from xx import yy两种方法最好统一使用一种,不要混合使用,这样比较利于提高程序的可读性。

猜你喜欢

转载自www.cnblogs.com/51study/p/9347423.html