模块和包的引入格式如下,后面详细举例说明
import 文件名
from 目录名 import 文件名
from 目录名.文件名 import 类名
一.模块
1.模块可以使代码复用,降低工作量,易于维护;实现代码共享,多人开发,lib库引用
模块是Python组织代码的基本方式,Python程序(.py)可以单独运行,也可以被其他程序调用,当被导入执行时,可以看做是一个模块(module),简单的说:一个.py文件就是一个模块,模块名与文件名相同
现有两个文件zhzhgo.py和module.py,文件zhzhgo.py内容为:print "I‘m zhzhgo.",文件module.py文件内容为:import zhzhgo,对于module.py来说,zhzhgo就是一个模块,执行module.py,打印结果:
>>>
I‘m zhzhgo.
>>>
2.reload()用于重载模块
现将module.py内容修改如下:
import zhzhgo import zhzhgo
你可以认为会打印两遍zhzhgo模块的内容,实际上运行效果如下,为了防止命名空间冲突,只执行一次
>>>
I‘m zhzhgo.
>>>
如果你想执行两次,那么可以使用reload()强制加载模块,有命名冲突的将被覆盖掉
import zhzhgo reload(zhzhgo)
此时打印结果为:
>>>
I‘m zhzhgo.
I‘m zhzhgo.
>>>
常见应用reload()举例:
Site.py修改sys,注意C:\Python27\Lib\site.py中有如下代码:
可以看出python启动过程中需要修改默认编码,之后会将这个方法删掉,当我们的程序需要手动更改编码的时候就需要reload回来
import sys reload(sys) sys.setdefaultencoding(‘utf8‘)
二.包
1.模块所在目录看做是包,目录名即为包名
包创建过程举例:
新建一个目录bao,目录下包含3个文件a.py、b.py、__init__.py,注意在该目录下必须创建一个__init__.py的文件,其作用是在包被加载的时候首先执行这个文件,否则引用包时会报错,a.py和b.py文件内容如下:
#a.py def say(): print "This is a!" #b.py def say(): print "This is b!"
在bao同级目录下创建test.py文件,内容如下:
#方法一: from bao import a from bao import b a.say() b.say() #方法二: import bao.a import bao.b from bao import * a.say() b.say() #方法三: from bao import * a.say() b.say()
运行test.py打印结果:
>>>
This is a!
This is b!
>>>
注意:用方法一和方法二时,__init__.py文件为空,用方法三时需要在__init__.py中写入以下内容
#__init__.py __all__=[‘a‘,‘b‘]
2.上面包中的模块只包含方法,下面我们看一下模块中包含类时如何引入
新建一个目录bao2,目录下包含3个文件a.py、b.py、__init__.py,a.py和b.py文件内容如下:
#a.py class A: @staticmethod def say(): print "This is A!" #b.py class B: @staticmethod def say(): print "This is B!"
在bao2同级目录下创建test2.py文件,内容如下:
#方法一: from bao2.a import A from bao2.b import B A.say() B.say() #方法二: from bao2 import * A.say() B.say()
运行test2.py打印结果:
>>>
This is a!
This is b!
>>>
注意:用方法一时,__init__.py文件为空,用方法二时需要在__init__.py中写入以下内容
#__init__.py from bao2.a import A from bao2.b import B
3.模块首先从当前目录查询,如果没有再按path顺序逐一查询
如:目录结构为bao1/bao2/bao3/a.py
则:from bao1.bao2.bao3.a import A
本文出自 “今日的努力,明日的成功!” 博客,请务必保留此出处http://zhzhgo.blog.51cto.com/10497096/1677773
原文地址:http://zhzhgo.blog.51cto.com/10497096/1677773