python基础系列:
python自学篇一[ Anaconda3安装 ]
python自学篇二[ pycharm安装及使用 ]
python自学篇三[ 判断语句if的使用 ]
python自学篇四[ 基本数据类型和字符串常用处理 ]
python自学篇五[ 列表 ]
python自学篇六[ 元组 ]
python自学篇七[ 字典+深拷贝与浅拷贝 ]描述
python自学篇八[ 循环:while+for+pass+range()+推导式 ]
python自学篇九[ 函数(一):参数+对象 ]
python自学篇九[ 函数(二):返回值return+yield+迭代器+生成器 ]
python自学篇九[ 函数(三):变量作用域+ATM+5个小练习 ]
python自学篇九[ 函数(四):递归函数+匿名函数+内置函数+高阶函数 ]
python自学篇十[ 面向对象 (一) :面向对象概念+定义类+练习一]
python自学篇十[ 面向对象 (二) :继承+多继承+类属性+实例属性]
python自学篇十[ 面向对象 (三) :访问限制+类方法+静态方法]
python自学篇十[ 面向对象 (四) :王者荣耀小游戏+模拟一个简单的银行进行业务办理的类]
python自学篇十一[ 模块简介+模块制作+dir()函数+标准模块+包]
python自学篇十二[ 文件:打开+读取+写入+3个习题]
python自学篇十一[ 模块简介+模块制作+dir()函数+标准模块+包]
一.模块简介
- 在实际开发中我们不可能不用到系统的标准模块,或第三方模块。
- 实现与时间有关的功能,就需要调用系统的time模块。
#导入整个模块
import time
- 调用模块中的函数时,必须加上模块名调用,因为可能存在多个模块中含有相同名称的函数,此时,如果只是通过函数名来调用,解释器无法知道到底要调用哪个函数。为了避免这样的情况,调用函数时,必须加上模块名
#导入整个模块
import time
time.sleep(5)#睡眠5秒
- 指定的模块中导入指定的部分
#from 模块名 import 函数名
from time import sleep
- 导入模块中的所有内容
from math import *
print(ceil(1.1)) #向上取整
print(floor(1.1)) #向下取整
- 给导入的模块取别名
import math as m
from math import ceil as c #不建议使用
-
实现与文件和文件夹有关的操作,就需要要用到os模块。
-
通过Selenium实现的Web自动化测试,那么Selenium对于Python来说就是一个第三方扩展模块。
- 每一个 Python 脚本文件都可以被当成是一个模块。
- 模块以磁盘文件的形式存在。
- 当一个模块变得过大,并且驱动了太多功能的话,就应该考虑拆一些代码出来另外建一个模块。
- 模块里的代码可以是一段直接执行的脚本,也可以是一堆类似库函数的代码,从而可以被别的模块导 入(import)调用。
- 模块可以包含直接运行的代码块、类定义、 函数定义或这几者的组合。
-
推荐所有的模块在Python模块的开头部分导入。而且最好按照这样的顺序:
-
Python标准库模块
-
Python第三方模块
-
应用程序自定义模块
二.模块制作
既然可调用系统模块,那么也可以自己创建一个模块,然后通过另一个程序调用
当你导入一个模块,Python解析器对模块位置的搜索顺序是:
- 当前目录
- 如果不在当前目录,Python则搜索在环境变量PYTHONPATH下的每个目录
- 如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/
- 模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。
1.同级目录下模块引入:
import test #引入同级目录中的test.py这个文件模块
print(test.add(2,3))#调用同级目录中的test.py模块中的add()方法
2.跨模块引入(不在同级目录下):
import study.test2 #模块名.函数名【引入study目录下的test.py这个文件模块】
print(study.test2.test2_add(2,3))#调用study目录下的test.py模块中的add()方法
3.回到上一级目录下,再导入模块
import sys #查看路径变量
print(sys.path)# 添加目标路径导当前环境中
sys.path.append('..\\') #返回上一级目录
import msg.send #引入msg目录下的send.py这个文件模块
msg.send.sendMsg()#调用msg目录下的send.py模块中的sendMsg()方法
4.覆盖标准模块
调用自己的模块,覆盖标准模块(系统的)
from msg import math #自定义的模块
print(math.ceil(1.1)) #向上取整
print(math.floor(1.1))
三.dir()函数
用于按模块名搜索模块定义,它返回一个字符串类型的存储列表该列表列出了所有类型的名称:变量,模块,函数,等等
print(dir())
print(dir(math))
四.标准模块
有些模块直接被构建在解析器里,这些虽然不是一些语言内置的功能,但是他却能很高效的使用,甚至是系统级调用也没问题。这些组件会根据不同的操作系统进行不同形式的配置,比如 winreg (Windows注册表访问)这个模块就只会提供给 Windows 系统。应该注意到这有一个特别的模块 sys ,它内置在每一个 Python 解析器中。
Python 3.x标准模块库目录
文本
-
string:通用字符串操作
-
re:正则表达式操作
-
difflib:差异计算工具
-
textwrap:文本填充
-
unicodedata:Unicode字符数据库
-
stringprep:互联网字符串准备工具
-
readline:GNU按行读取接口
-
rlcompleter:GNU按行读取的实现函数
二进制数据
-
struct:将字节解析为打包的二进制数据
-
codecs:注册表与基类的编解码器
数据类型
-
datetime:基于日期与时间工具
-
calendar:通用月份函数
-
collections:容器数据类型
-
collections.abc:容器虚基类
-
heapq:堆队列算法
-
bisect:数组二分算法
-
array:高效数值数组
-
weakref:弱引用
-
types:内置类型的动态创建与命名
-
copy:浅拷贝与深拷贝
-
pprint:格式化输出
-
reprlib:交替repr()的实现
数学
-
numbers:数值的虚基类
-
math:数学函数
-
cmath:复数的数学函数
-
decimal:定点数与浮点数计算
-
fractions:有理数
-
random:生成伪随机数
函数式编程
-
itertools:为高效循环生成迭代器
-
functools:可调用对象上的高阶函数与操作
-
operator:针对函数的标准操作
文件与目录
-
os.path:通用路径名控制
-
fileinput:从多输入流中遍历行
-
stat:解释stat()的结果
-
filecmp:文件与目录的比较函数
-
tempfile:生成临时文件与目录
-
glob:Unix风格路径名格式的扩展
-
fnmatch:Unix风格路径名格式的比对
-
linecache:文本行的随机存储
-
shutil:高级文件操作
-
macpath:Mac OS 9路径控制函数
持久化
-
pickle:Python对象序列化
-
copyreg:注册机对pickle的支持函数
-
shelve:Python对象持久化
-
marshal:内部Python对象序列化
-
dbm:Unix“数据库”接口
-
sqlite3:针对SQLite数据库的API 2.0
压缩
-
zlib:兼容gzip的压缩
-
gzip:对gzip文件的支持
-
bz2:对bzip2压缩的支持
-
lzma:使用LZMA算法的压缩
-
zipfile:操作ZIP存档
-
tarfile:读写tar存档文件
文件格式化
-
csv:读写CSV文件
-
configparser:配置文件解析器
-
netrc:netrc文件处理器
-
xdrlib:XDR数据编码与解码
-
plistlib:生成和解析Mac OS X .plist文件
加密
-
hashlib:安全散列与消息摘要
-
hmac:针对消息认证的键散列
操作系统工具
-
os:多方面的操作系统接口
-
io:流核心工具
-
time:时间的查询与转化
-
argparser:命令行选项、参数和子命令的解析器
-
optparser:命令行选项解析器
-
getopt:C风格的命令行选项解析器
-
logging:Python日志工具
-
logging.config:日志配置
-
logging.handlers:日志处理器
-
getpass:简易密码输入
-
curses:字符显示的终端处理
-
curses.textpad:curses程序的文本输入域
-
curses.ascii:ASCII字符集工具
-
curses.panel:curses的控件栈扩展
-
platform:访问底层平台认证数据
-
errno:标准错误记号
-
ctypes:Python外部函数库
并发
-
threading:基于线程的并行
-
multiprocessing:基于进程的并行
-
concurrent:并发包
-
concurrent.futures:启动并行任务
-
subprocess:子进程管理
-
sched:事件调度
-
queue:同步队列
-
select:等待I/O完成
-
dummy_threading:threading模块的替代(当_thread不可用时)
-
_thread:底层的线程API(threading基于其上)
-
_dummy_thread:_thread模块的替代(当_thread不可用时)
进程间通信
-
socket:底层网络接口
-
ssl:socket对象的TLS/SSL填充器
-
asyncore:异步套接字处理器
-
asynchat:异步套接字命令/响应处理器
-
signal:异步事务信号处理器
-
mmap:内存映射文件支持
互联网
-
email:邮件与MIME处理包
-
json:JSON编码与解码
-
mailcap:mailcap文件处理
-
mailbox:多种格式控制邮箱
-
mimetypes:文件名与MIME类型映射
-
base64:RFC 3548:Base16、Base32、Base64编码
-
binhex:binhex4文件编码与解码
-
binascii:二进制码与ASCII码间的转化
-
quopri:MIME quoted-printable数据的编码与解码
-
uu:uuencode文件的编码与解码
HTML与XML
-
html:HTML支持
-
html.parser:简单HTML与XHTML解析器
-
html.entities:HTML通用实体的定义
-
xml:XML处理模块
-
xml.etree.ElementTree:树形XML元素API
-
xml.dom:XML DOM API
-
xml.dom.minidom:XML DOM最小生成树
-
xml.dom.pulldom:构建部分DOM树的支持
-
xml.sax:SAX2解析的支持
-
xml.sax.handler:SAX处理器基类
-
xml.sax.saxutils:SAX工具
-
xml.sax.xmlreader:SAX解析器接口
-
xml.parsers.expat:运用Expat快速解析XML
互联网协议与支持
-
webbrowser:简易Web浏览器控制器
-
cgi:CGI支持
-
cgitb:CGI脚本反向追踪管理器
-
wsgiref:WSGI工具与引用实现
-
urllib:URL处理模块
-
urllib.request:打开URL连接的扩展库
-
urllib.response:urllib模块的响应类
-
urllib.parse:将URL解析成组件
-
urllib.error:urllib.request引发的异常类
-
urllib.robotparser:robots.txt的解析器
-
http:HTTP模块
-
http.client:HTTP协议客户端
-
ftplib:FTP协议客户端
-
poplib:POP协议客户端
-
imaplib:IMAP4协议客户端
-
nntplib:NNTP协议客户端
-
smtplib:SMTP协议客户端
-
smtpd:SMTP服务器
-
telnetlib:Telnet客户端
-
uuid:RFC4122的UUID对象
-
socketserver:网络服务器框架
-
http.server:HTTP服务器
-
http.cookies:HTTPCookie状态管理器
-
http.cookiejar:HTTP客户端的Cookie处理
-
xmlrpc:XML-RPC服务器和客户端模块
-
xmlrpc.client:XML-RPC客户端访问
-
xmlrpc.server:XML-RPC服务器基础
-
ipaddress:IPv4/IPv6控制库
多媒体
-
audioop:处理原始音频数据
-
aifc:读写AIFF和AIFC文件
-
sunau:读写Sun AU文件
-
wave:读写WAV文件
-
chunk:读取IFF大文件
-
colorsys:颜色系统间转化
-
imghdr:指定图像类型
-
sndhdr:指定声音文件类型
-
ossaudiodev:访问兼容OSS的音频设备
国际化
-
gettext:多语言的国际化服务
-
locale:国际化服务
编程框架
-
turtle:Turtle图形库
-
cmd:基于行的命令解释器支持
-
shlex:简单词典分析
Tk图形用户接口
-
tkinter:Tcl/Tk接口
-
tkinter.ttk:Tk主题控件
-
tkinter.tix:Tk扩展控件
-
tkinter.scrolledtext:滚轴文本控件
开发工具
-
pydoc:文档生成器和在线帮助系统
-
doctest:交互式Python示例
-
unittest:单元测试框架
-
unittest.mock:模拟对象库
-
test:Python回归测试包
-
test.support:Python测试工具套件
-
venv:虚拟环境搭建
调试
-
bdb:调试框架
-
faulthandler:Python反向追踪库
-
pdb:Python调试器
-
timeit:小段代码执行时间测算
-
trace:Python执行状态追踪
运行时
-
sys:系统相关的参数与函数
-
sysconfig:访问Python配置信息
-
builtins:内置对象
-
main:顶层脚本环境
-
warnings:警告控制
-
contextlib:with状态的上下文工具
-
abc:虚基类
-
atexit:出口处理器
-
traceback:打印或读取一条栈的反向追踪
-
future:未来状态定义
-
gc:垃圾回收接口
-
inspect:检查存活的对象
-
site:址相关的配置钩子(hook)
-
fpectl:浮点数异常控制
-
distutils:生成和安装Python模块
解释器
-
code:基类解释器
-
codeop:编译Python代码
导入模块
-
imp:访问import模块的内部
-
zipimport:从ZIP归档中导入模块
-
pkgutil:包扩展工具
-
modulefinder:通过脚本查找模块
-
runpy:定位并执行Python模块
-
importlib:import的一种实施
Python语言
-
parser:访问Python解析树
-
ast:抽象句法树
-
symtable:访问编译器符号表
-
symbol:Python解析树中的常量
-
token:Python解析树中的常量
-
keyword:Python关键字测试
-
tokenize:Python源文件分词
-
tabnany:模糊缩进检测
-
pyclbr:Python类浏览支持
-
py_compile:编译Python源文件
-
compileall:按字节编译Python库
-
dis:Python字节码的反汇编器
-
pickletools:序列化开发工具
其它
- formatter:通用格式化输出
Windows相关
-
msilib:读写Windows Installer文件
-
msvcrt:MS VC++ Runtime的有用程序
-
winreg:Windows注册表访问
-
winsound:Windows声音播放接口
Unix相关
-
posix:最常用的POSIX调用
-
pwd:密码数据库
-
spwd:影子密码数据库
-
grp:组数据库
-
crypt:Unix密码验证
-
termios:POSIX风格的tty控制
-
tty:终端控制函数
-
pty:伪终端工具
-
fcntl:系统调用fcntl()和ioctl()
-
pipes:shell管道接口
-
resource:资源可用信息
-
nis:Sun的NIS的接口
-
syslog:Unix syslog程序库
宁静的天空:http://www.cnblogs.com/ribavnu/p/4886472.html
五.包
什么是包
- 包是一种管理 Python 模块命名空间的形式,采用"点模块名称"。比如一个模块的名称是 A.B, 那么他表示一个包 A中的子模块B
- 目录中只有包含一个叫做__init__.py的文件才会被认作是一个包
- 在导入包的时候,Python会从sys.path中的目录来寻找这个包中包含的子目录
导入包
现有两个模块功能有些联系,所以将其放到同一个文件夹下,一个文件中的类继承另一个问文件中的类。
- 使用import文件.模块的方式导入
- 使用from文件夹import模块的方式导入
创建__init__.py
目录中只有包含了叫做__init__.py的文件,才能被程序认作是包,模块才能被导入成功。现在我们就在msg文件夹下创建一个__init__.py文件,并且一定要在文件中写入__all__
__init__.py 控制着包的导入行为。如果__init__.py文件为空的话,仅仅是把这个包导入,不会导入包中的模块。__init__.py中的__all__变量,是用来控制from包名import * 时导入的模块。
可以在__init__.py中编写其他内容,在导入时,这些编写的内容就会被执行。
可以在__init__.py中向sys.path添加当前被调用模块路径。
__all__总结
1.编写Python代码(不建议在__init__中写python模块,可以在包中在创建另外的模块来写,尽量保证__init__.py简单)
2.模块中不使用__all__属性,则导入模块内的所有公有属性,方法和类 。 模块中使用__all__属性,则表示只导入__all__中指定的属性,因此,使用__all__可以隐藏不想被import的默认值。 __all__变量是一个由string元素组成的list变量。 它定义了当我们使用 from <module> import * 导入某个模块的时候能导出的符号(这里代表变量,函数,类等)。
3.from <module> import * 默认的行为是从给定的命名空间导出所有的符号(当然下划线开头的变量,方法和类除外)。 需要注意的是 __all__ 只影响到了 from <module> import * 这种导入方式, 对于 from <module> import <member> 导入方式并没有影响,仍然可以从外部导入。
- 创建__init__.py总结
1.包将有联系的模块组织在一个,即放到同一个文件夹下,并且在这个文件夹创建一个名字为__init__.py文件,那么这个文件夹就称之为包
2.有效避免模块名称冲突问题,让应用组织结构更加清晰
imp.reload()简介
默认情况下,模块在第一次被导入之后,其他的导入都不再有效。如果此时在另一个窗口中改变并保存了模块的源代码文件,也无法更新该模块。这样设计原因在于,导入是一个开销很大的操作(导入必须找到文件,将其编译成字节码,并且运行代码),以至于每个文件、每个程序运行不能够重复多于一次。
当一个模块被导入到一个脚本,模块顶层部分的代码只会被执行一次。因此,如果你想重新执行模块里顶层部分的代码,可以用reload()函数。该函数会重新导入之前导入过的模块。
语法如下:
reload(module_name)