3.5.1 引用模块
在Python语言中通过from..import..的方式引用模块,下面引用time模块。
XX.PYImport time
Print time.ctime()如果只用到time模块下面的ctime()方法,可以这样使用:
Xx.pyFrom 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.pyDef add(a,b):
Print a+b在相同的目录下面创建一个文件(count.py)
Project\count.pyImport 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 sys
Sys.path.append(‘model’)
From model import *
现在我们用星号(*)表示导入model 下面所有文件,这个所有具体包含什么由__init__.py 决定,因为只import 了a 和b 了.
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) | Powered by Discuz! X3.2 |