3.5 模组 3.5.1 引用模块 在Python语言中通过from..import..的方式引用模块,下面引用time模块。 XX.PY
Import time Print time.ctime()
如果只用到time模块下面的ctime()方法,可以这样使用: Xx.py
From time import ctime Print ctime()
一次性把time模块下面的所有方法都引进来: Xx.py
#coding=utf-8 From time import * Print ctime() Print “休息一两秒” Sleep(2)
Python 所安装的模块存放在C:\Python27\Lib\site-packages\目录下面 3.5.2 模块调用 我们可以自己创建一个模块,然后通过另一个程序调用。 创建一个目录(project),在目录下面创建一个文件(pub.py),在文件中创建一个函数。 Project\pub.py
Def add(a,b): Print a+b
在相同的目录下面创建一个文件(count.py) Project\count.py
Import pub Printpub.add(3,5)
这样就实现了跨文件的函数调用。
**知识延伸: 在project目录下面多了一个pub.pyc文件,pyc文件是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由python的虚拟机来执行。
3.5.3 跨目录模块调用 调用文件和被调用的文件不在同一目录下面,调用目录如下: ----project/model/pub.py ----project/count.py Ps:删除刚才调用生成的pub.pyc文件。再来执行count.py,python会给出提示信息,找不到pub模块。那么python是如何找到模块的呢?
首先要知道,python在执行import语句时,到底进行了什么操作,按python的文档,它执行如下操作: 第一步,创建一个新的,空的module对象(它可能包含多个module) 第二步,把这个module对象插入sys.module中 第三步,装载module的代码(如果需要,首先必须编译) 第四步,执行新的module中对应的代码 在执行第三步时,首先要找到,module程序所在的位置,搜索顺序是: 当前路径(以及从当前目录指定的sys.path),然后是pythonPATH,然后是python的安装设置相关的默认路径。正因为这样的顺序,如果当前路径或pythoPATH中存在与标准module同样module,则会覆盖标准module。也就是说,如果当前目录下存在XML.py,那么执行import XML时,导入的是当前目录下的module,而不是系统标准的XML。 我们可以先构建一个package,以普通的方式导入,就可以直接访问此package中各个module了。在python中的package必须包含一个__init__.PY的文件.
现在我们就可以将..project/model/目录添加到系统环境变量下的path下面,但是这样不够灵活,我们可以调用python的sys模块来实现。 Project\count.py Import sys Sys.path.append(‘\model’) From model import pub Print pub.add(3,5)
调用sys模块,把model目录通过append()方法追加到系统环境变量path下面。Append()是一个非常有用的方法,它通常用于向一个数据或集合尾部添加新数据。 PS:”\model”是一个相对路径,如果pub.py在别的目录下面,就需要用绝对路径了,如:append(“D:\\project\\model”) 现在运行程序依然会告诉我们找不到model,我们还需要在model目录下面创建一个__init__.PY的文件,内容可以为空。这个文件告诉python model是一个可以被调用的模块。现在就可以正常运行了。 那么我们可以在__init__.PY的文件目录下面放点什么呢?例如在model目录下面有两三个文件(a.py、b.py、c.py),那么打开__init__.PY的文件: Import a,b
Project\count.py
Import sys Sys.path.append(‘model’) From model import * Print pub.add(2,3)
现在我们用星号(*)表示导入model 下面所有文件,这个所有具体包含什么由__init__.py 决定,因为只import 了a 和b 了.
|