码迷,mamicode.com
首页 > 编程语言 > 详细

python模块和包

时间:2015-07-24 01:38:00      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:python   模块      

模块和包的引入格式如下,后面详细举例说明

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

python模块和包

标签:python   模块      

原文地址:http://zhzhgo.blog.51cto.com/10497096/1677773

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!