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两种方法最好统一使用一种,不要混合使用,这样比较利于提高程序的可读性。