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内容修改如下:
>>> I'm zhzhgo.>>>如果你想执行两次,那么可以使用reload()强制加载模块,有命名冲突的将被覆盖掉
>>>
I'm zhzhgo.
I'm zhzhgo.
>>>
常见应用reload()举例:
Site.py修改sys,注意C:\Python27\Lib\site.py中有如下代码:
可以看出python启动过程中需要修改默认编码,之后会将这个方法删掉,当我们的程序需要手动更改编码的时候就需要reload回来
二.包
1.模块所在目录看做是包,目录名即为包名
包创建过程举例:
新建一个目录bao,目录下包含3个文件a.py、b.py、__init__.py,注意在该目录下必须创建一个__init__.py的文件,其作用是在包被加载的时候首先执行这个文件,否则引用包时会报错,a.py和b.py文件内容如下:
>>> This is a!This is b!>>> 注意:用方法一和方法二时,__init__.py文件为空,用方法三时需要在__init__.py中写入以下内容
2.上面包中的模块只包含方法,下面我们看一下模块中包含类时如何引入
新建一个目录bao2,目录下包含3个文件a.py、b.py、__init__.py,a.py和b.py文件内容如下:
3.模块首先从当前目录查询,如果没有再按path顺序逐一查询
如:目录结构为bao1/bao2/bao3/a.py
则:from bao1.bao2.bao3.a import A
本文出自 “今日的努力,明日的成功!” 博客,请务必保留此出处http://zhzhgo.blog.51cto.com/10497096/1677773
一.模块
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
相关文章推荐
- Python中yield深入理解
- Python的高级特性11:拓展基本数据类型(dict)
- Python学习笔记-面向对象篇
- MFC获得主窗口和父窗口指针
- CUDA6.5 + GTX960 + Winpython,运行Theano的DBN
- Python的高级特性10:无聊的@property
- Python个人学习笔记1_初识python_http服务器篇
- 学习python基础语法中遇到的一些问题
- python 超时异常处理
- python数据类型与json的互相转换
- Python下opencv使用笔记(十一)(详解hough变换检测直线与圆)
- Python单元测试框架
- python selenium中调用执行js
- python paramiko
- Python学习日志之Python模块
- python基础教程总结12——数据库
- Python入门学习笔记之Python模块
- python多进程、进程间通信、进程锁
- Python Split函数的用法总结
- Python区分raw_input()与input()