模块和包简介
装饰器:
- 是一个函数,其用途是包装另一个函数,以实现透明地修改或增强被包装对象的功能
- @装饰器名称,出现在函数的定义之前
- 定义:
def deco(func):
def wrapper():
print(“deco begain……”)
func()
print(“deco end….”)
return wrapper
>>>@deco
· · · def show():
· · · print(“func…..”)
>>>show()
deco begain…..
func….
deco end……
- show函数使用了装饰器,使用wrapper包装了show函数,本来show只能输出”func….”,但是装饰以后输出“deco begain…. func…. deco end….”
Python模块
- 可以将代码量较大的程序分割成多个有组织的、彼此独立但又能互相交互的代码片段,这些自我包含的有组织的代码段就是模块
- 模块在物理形式上表现为以.py结尾的代码文件
- 一个文件被看做一个独立的模块,一个模块也可以被看作是一个文件
- 模块的文件名就是模块的名字加上扩展名.py
- 每个模块都有自己的名称空间
- Python允许“导入”其他模块以实现代码重用,从而也实现了将独立的代码文件组织成更大的程序系统
- python中,模块也是对象
- 在一个模块的顶层定义的所有变量都在被导入时成为了被导入模块的属性
模块的执行环境
- 模块是被导入的,但模块也可以导入和使用其他模块,这些模块可以用python或其他编程语言写成
- 模块可内含变量,函数以及类来进行其工作,而函数和类可以包含变量和其他元素
导入模块:
- import : 导入指定的模块整体,会引入新的名称空间,即模块名;
- import copy
- copy.deepcopy()
- import mod1[,mod2,…]
- import mod1 as mod1_alias
- import copy
- from - import : 导入指定的模块的部分属性,把模块的属性直接引入到当前名称空间
- from copy import deepcopy
- deepcopy()
- from copy import deepcopy
模块搜索
- Python解释器在import模块时必须先找到对应的模块文件
- 程序的主目录
- PYTHONPATH目录(如果设置了此两变量)
- 标准链接库目录
- 任何.pth文件的内容(如果存在.pth)
- 这四个组件组合起来即为sys.path所包含的路径,而Python会选择在搜索路径中的第一个符合导入文件名的文件
Python包
- 将一组模块归并到一个目录中,此目录即为包,目录即为包名
- 包是一个有层次的文件目录结构,它定义了一个由模块和子包组成的python应用程序执行环境
- 基于包,python在执行模块导入时可以指定模块的导入路径
- import dir.dir2.mod1
- 要使用如图所示的package1,则Py_pkg_mod容器必须要在模块搜索路径中
- import package1.mod1
- 包导入语句的路径内的每个目录内都必须有init.py文件
- init.py可包含python代码,但通常为空,仅用于扮演包初始化的挂钩、替目录产生模块命名空间以及使用目录导入时实现from * 行为的
模块的顶层执行及被导入
- 一个模块文件可以同时支持顶层执行(作为顶层文件)或被导入(作为模块文件)
- 每个模块都有个名为name的内置属性,python会自动设置该属性
- 如果文件是以顶层程序文件执行,在启动时,name的值为”main”
- 如果是被导入,则name的值为模块名
- 可以在模块文件中检测自己的name属性,以之实现在执行时运行指定的代码
- 顶层执行常用于模块的自我测试
- 每个模块都有个名为name的内置属性,python会自动设置该属性
!/bin/python
#
def testFunc():
print (“Hello world!”)
if __name__ == “__main__”:
testFunc()
模块打包
* distutils模块能够帮助完成模块或程序发布
* “发布”是指一个文件集合,这些文件联合在一起可使用distutils构建、打包和发布模块
* 创建好的发布可以用于安装,也可上传到PyPI与他人共享
* 创建发布
* 将各代码文件组织到模块容器中
* 准备一个README或README.txt文件
* 而后在容器中创建setup.py文件
from distutils.core import setup
set up(
name = ’testmod’,
version = ‘0.0.1’,
author = ‘xiaoc’,
author_email = ‘example@gmail.com’,
py_modules = [’testmod’],
url = ‘ http://www.example.com',
description = ‘A simple module’,
)
* 在要发布的目录中执行:python setup.py sdist
安装第三方模块
- easyinstall
- pip
- 搜索pip库中的mysql
- pip search mysql
- 安装pymysql
- pip install pymysql
- 查看python库中有哪些模块
- help(“modules”)
- 搜索pip库中的mysql