Python程序设计入门(4)模块和包


Posted in Python onJune 16, 2014

Python语言功能非常强大,除了类之外,还有模块和包的概念,这有点像perl,此处简单说说包和模块。

一、Python中的模块

模块——其实就是我们说的库(lib)的概念,不过它不仅只是可以包含一系列函数,也可以包含类,python里是没有像C语言之类,直接include某文件的,包正是这种类似的东西。

Python 引入模块的方法有两种:

1、import 模块名(实际是对应的就是 文件名.py )

2、模块名 = __import__("模块文件名(不带扩展名)")

也可以" import 模块名  as  别名 "这样用

例如:

test.py
# -*- coding: gb18030 -*-
#引入模块
import test_mod
#调用模块里的函数
test_mod.my_func()
#调用模块里的类
tc = test_mod.test_cls()
tc.test_func()
test_mod.py源码如下:
# -*- coding: gb18030 -*-
def my_func():
    print 'I am a function in the module! '
class test_cls:
    def test_func(self):
        print 'I am a mothod in the class! '

调用模块里的函数或类一定要用 “模块名.类名|函数名” 的方式。

正是因为这种特性,python里很多 os.xx 、 sys.xx 之类的语法,但它不一定是对象(对象和非对象之间显得极混乱,或者可以认为模块也是一个对象吧,只是比较特殊),这是python语言的一个严重的缺点,不过当你习惯这些的时候,就比较容易读懂python的脚本了。

sys 和 os 是 python 里最常用的模块,需要了解一下它们。

二、Python中的包

包实际上就是对一系列模块的封装,以防止模块名之间发生冲突,对于一个标准的python程序,通常的结构为:

app.py
    appname
        __init__.py
        son_pack1
            __init__.py
            son_mod_1_1.py
            son_mod_1_2.py
         son_pack2
            __init__.py
            son_mod_2_1.py
            son_mod_2_2.py
        son_mod_1.py
        .......

如果学过Java就会明显,这是一种按目录来查找文件的方法,不过不同之处是每个目录必须带 __init__.py 否则将不会被识别为包的子目录。

在有__version__、__all__、__path__ 三个特殊变量,可以指定,也可以让这文件为空。

调用包里的类或函数的方法是:

包名.子包名.类名|函数名 

这实际上就相当于C++或C#里的名字空间。

在调用包时,需要注册目录和具体模块的调用方法

如,要调用 son_mod_1_1.py

那么就是:

appname.son_pack1.son_mod_1_1

此外还有一种方法是用  form 关键字,方法为:

from appname.son_pack1 import son_mod_1_1

如果要喜引入 appname.son_pack1 里的所有模块,那么为:

from appname.son_pack1 import *

对于使用 import * 的情况,必须在 __init__.py 中用 __all__ 指明,如:

__all__ = ["son_mod_1_1", "son_mod_1_2"]

Python 相关文章推荐
python的id()函数介绍
Feb 10 Python
python数组复制拷贝的实现方法
Jun 09 Python
Python多进程同步简单实现代码
Apr 27 Python
Python中json格式数据的编码与解码方法详解
Jul 01 Python
Python如何快速上手? 快速掌握一门新语言的方法
Nov 14 Python
python链接oracle数据库以及数据库的增删改查实例
Jan 30 Python
Python实现iOS自动化打包详解步骤
Oct 03 Python
解决python3运行selenium下HTMLTestRunner报错的问题
Dec 27 Python
基于Python2、Python3中reload()的不同用法介绍
Aug 12 Python
使用python模拟高斯分布例子
Dec 09 Python
打包PyQt5应用时的注意事项
Feb 14 Python
基于Python获取docx/doc文件内容代码解析
Feb 17 Python
Python程序设计入门(3)数组的使用
Jun 16 #Python
Python程序设计入门(2)变量类型简介
Jun 16 #Python
Python程序设计入门(1)基本语法简介
Jun 13 #Python
Python对两个有序列表进行合并和排序的例子
Jun 13 #Python
用Python输出一个杨辉三角的例子
Jun 13 #Python
Python 的 with 语句详解
Jun 13 #Python
python学习笔记:字典的使用示例详解
Jun 13 #Python
You might like
pw的一个放后门的方法分析
2007/10/08 PHP
php判断终端是手机还是电脑访问网站的思路及代码
2013/04/24 PHP
探讨Hessian在PHP中的使用分析
2013/06/13 PHP
php多文件上传下载示例分享
2014/02/20 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
2015/11/27 PHP
PHP封装的多文件上传类实例与用法详解
2017/02/07 PHP
浅析PHP echo 和 print 语句
2020/06/30 PHP
发布BlueShow v1.0 图片浏览器(类似lightbox)blueshow.js 打包下载
2007/07/21 Javascript
javascript常见用法总结
2014/05/22 Javascript
JavaScript常用的弹出广告及背投广告实现方法
2015/02/06 Javascript
jQuery实现查找最近父节点的方法
2016/06/23 Javascript
js面向对象编程总结
2017/02/16 Javascript
基于node下的http小爬虫的示例代码
2018/01/11 Javascript
vue同步父子组件和异步父子组件的生命周期顺序问题
2018/10/07 Javascript
微信小程序获取位置展示地图并标注信息的实例代码
2019/09/01 Javascript
微信小程序 wx:for遍历循环使用实例解析
2019/09/09 Javascript
解决Vue在Tomcat8下部署页面不加载的问题
2019/11/12 Javascript
vue 中url 链接左边的小图标更改问题
2019/12/30 Javascript
vue element和nuxt的使用技巧分享
2021/01/14 Vue.js
[48:23]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第一局
2016/03/05 DOTA
Python实现端口复用实例代码
2014/07/03 Python
使用Python标准库中的wave模块绘制乐谱的简单教程
2015/03/30 Python
低版本中Python除法运算小技巧
2015/04/05 Python
使用Python实现在Windows下安装Django
2018/10/17 Python
基于python监控程序是否关闭
2020/01/14 Python
美国名表在线商城:Ashford(支持中文)
2019/09/24 全球购物
办公室文秘岗位职责
2013/11/15 职场文书
编辑找工作求职信分享
2014/01/03 职场文书
怎样写演讲稿
2014/01/04 职场文书
三方合作协议书范本
2014/04/18 职场文书
大学生新学期计划书
2014/04/28 职场文书
具结保证书
2015/01/17 职场文书
护士先进个人总结
2015/02/13 职场文书
高三毕业感言
2015/07/30 职场文书
小学二年级班主任工作经验交流材料
2015/11/02 职场文书
解析MySQL索引的作用
2022/03/03 MySQL