一、模块调用
1.创建一个目录project,并且在目录下面创建两个文件
project/
一 pub.py
L一 count.py
在pub.py文件中创建add函数。
1 2 3 4 | #pub.py def add(a,b): return a + b |
在相同的目录下再创建一个文件count.py,调用pub.py文件中的add()函数
1 2 3 4 | #count.py from pub import add print (add( 4 , 5 )) #输出结果为“9” |
这样即实现了跨文件的函数调用
2.跨目录模块调用
目录结构如下所示
project/
------model/
L一 pub.py
L一 count. py
1 2 3 4 | #count.py from model.pub import add print (add( 4 , 5 )) |
在Python 2中将会抛出Impo口Eπor: 找不到名字为model的模块,错误如下图所示, 我们稍后再讨论 Python 2如何才能找到model下面的pub.py文件。
project/
------model/
L一 count.py
L一 new_count.py
L一 test. py
代码如下所示:
1 2 3 4 5 | #count.py class A(): def add( self ,a,b): return a + b |
1 2 3 4 5 6 7 8 9 | #new_count.py from count import A class B(A): def sub( self ,a,b): return a - b result = B().add( 2 , 5 ) print result #输出结果为“7” |
目前,都没有问题,接下来创建与model目录平级的test.py
1 2 3 4 5 6 | #test.py from model import new_count test = new_count.B() test.add( 2 , 5 ) |
输出结果如下图所示
1 2 3 4 5 6 7 8 9 10 11 12 13 | 知识延伸: 当Python在执行 import 语句时,到底进行了什么 操作。按照python的文档, 它执行了如下操作: 第l步, 创建一个新的module对象(它可能包含多个module) ; 第 2 步, 把这个module对象插到sys.module中; 第 3 步, 装载module的代码(如果需要,则必须先编译); 第 4 步, 执行新的module中对应的代码 在执行第 3 步时, 首先需要找到module程序所在的位直 ,搜索的顺序是:当前路径(以及从当前目录指定的sys.path),PythonPATH,再后是Python 安装时设直的相关的默认路径。 正因为存在这样的顺序 ,所以如果当前路径或 PythonPATH中存在与标准module同样的module,则会覆盖标准module。也就 是说, 如果当前目录下存在xml.py, 那么在执行 import xml 时, 导入的是当前目录下的module, 而不是系统标准的xml。 了解了这些后, 我们就可以先构建一个package,以普通module的方式导入,这样即可直接访问此package中的各个 module。 Python 2 中的package必须包含一个__init_.py的文件。 |
调整后的代码如下所示:
1 2 3 4 5 6 7 8 9 | #test.py #coding:utf-8 import sys sys.path.append( "./model" ) #将model目录添加到系统环境变量path下 from model import new_count test = new_count.B() print (test.add( 5 , 5 )) |
但是运行之后,还是报错
我们使用的是python2,因此在model目录下面还需要在.../model/目录下创建一个__init_.py 文件(文件内容可以为空), 用来标识这是一个标准的包含了 Python 模块的目录。如下图所示
再次运行test.py文件,即可正常运行,输出结果如下图所示
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步