您的位置:首页 > 编程语言 > Python开发

python模块和包

2015-07-23 23:10 627 查看
模块和包的引入格式如下,后面详细举例说明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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: