人生苦短,我用python。

一、模块

模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。

模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用python标准库的方法。

模块能定义函数,类和变量,模块里也能包含可执行的代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#新建模块文件modle_1.py,内容如下:
def p_func(arg):
print('hello',arg)
return

#新建主模块文件main.py,内容如下:
from modle_1 import p_func #导入模块modle_1中的p_func函数

if __name__ == "__main__": #判断是否为主程序执行口
p_func('python')


#output:
hello python

ps:自己创建模块时要注意命名,不能和Python自带的模块名称冲突。例如,系统自带了sys模块,自己的模块就不可命名为sys.py,否则将无法导入系统自带的sys模块。

二、模块引入

1、import

import module1[, module2[,... moduleN]

1
2
import math  # 直接导入模块
print(math.sqrt(2))

2、from…import

from modname import name1[, name2[, ... nameN]]

1
2
3
4
5
from math import sqrt  # 导入模块一部分内容到当前命名空间中,注意 from math import * 可以导入全部内容,但是不推荐
print(sqrt(2))

from math import sqrt as sq # 给导入内容取别名,可以简化名称
print(sq(2))

3、from…import *

from modname import *
这样会把模块中的所有内容导入到当前命名空间,一般不建议使用,消耗内存空间,也容易出现未预知的问题。

注意,模块中的__all__变量:

1
2
# 模块中有__all__变量,那么from math import * 只有__all__内指定的属性、方法、类可被导入
__all__ = ['ClassName','FunctionName','VariableName']

三、搜索路径

python解析器对模块位置的搜索顺序是:

  • 当前目录
  • shell变量PYTHONPATH下的每个目录
  • python模块路径目录

1、添加搜索路径

方法一:直接修改sys.path,运行结束后失效。

1
2
import sys
sys.path.append('')

方法二:设置环境变量PYTHONPATH,一般不推荐。
set PYTHONPATH =/usr/local/lib/python

2、导入搜索路径

1
2
3
4
5
6
7
8
9
10
11
12
13
# 导入搜索路径

import sys
print(sys.path) # import 搜索路径
sys.path.append(r'D:\pythontest') # 程序执行时导入模块路径
sys.path.insert(0,'D:\pythontest') # 可以确保先搜索这个路径

import test # 1、首次导入模块
test.test() # (1)模块函数打印“1”
test.test() # (2)程序运行时修改模块函数打印“1”“2”,但是也不会即刻生效,打印结果还是“1”
from imp import * # reload()在imp里,使用前导入
reload(test) # 2、重新加载模块
test.test() # (3)重新加载模块后,打印结果为“1”“2”

注意循环导入问题,比如模块A导入了模块B,而模块B又导入了模块A。怎样避免循环导入:

  • 程序设计上分层,降低耦合
  • 导入语句放在后面需要导入时再导入,例如放在函数体内导入

四、作用域

1、正常变量

正常的函数和变量名是公开的(public),可以被直接引用,比如:abc,x123,PI等。

2、特殊变量

类似__xxx__这样的变量是特殊变量,可以被直接引用,但是有特殊用途,我们自己的变量一般不要用这种变量名。
比如:__name__属性,个模块都有一个__name__属性,当其值是’__main__‘时,表明该模块自身在运行,否则是被引入。

3、私有变量

类似_xxx__xxx这样的变量是私有变量,(private)函数和变量“不应该”被直接引用。

ps:内置的函数dir(模块名)可以找到模块内定义的所有名称。以一个字符串列表的形式返回。

五、包

包,将有联系的模块组织在一起,放到同一个文件夹下,并在文件夹创建一个名为__init__.py 文件。

目录只有包含一个__init__.py文件,才会被认作是一个包。

模块用来组织python代码,包用来组织模块。

1、包的导入

(1)import

1
2
3
import sound.effects.echo  # 只导入一个包里面的特定模块

sound.effects.echo.echofilter(input, output, delay=0.7, atten=4) # 访问时必须使用全名

(2)from…import

1)导入子模块

1
2
3
from sound.effects import echo  # 导入子模块

echo.echofilter(input, output, delay=0.7, atten=4) #访问不需要那些冗长的前缀

2)直接导入一个函数或者变量

1
2
3
from sound.effects.echo import echofilter  # 导入一个函数

echofilter(input, output, delay=0.7, atten=4) # 直接访问函数

(3)from…import *
这个方法在 Windows平台上工作的就不是非常好,因为Windows是一个大小写不区分的系统。如果非要使用,请使用下面的方法:

1
2
3
# 包中的__init__.py文件,控制着包的导入行为
# 在__init__.py文件中,定义一个__all__变量,它控制着 from 包名 import * 时能导入的模块
__all__ = ['ModuleName1','ModuleName2','ModuleName3']

2、模块的发布

(1)要打包的模块目录需包含:文件 setup.py 和包 packagename(modulename.py、__init__.py)

(2)编辑setup.py文件:

1
2
from distutils.core import setup
setup(name='testmodule', version='1.0', description='test module', author='tester', py_modules=['packagename.modulename'])

(3)构建模块
> python setup.py build # 构建后目录结构多一个build目录

(4)生成发布压缩包
> python setup.py sdist # 打包后,生成最终发布压缩包testmodule-1.0.tar.gz

(5)模块的安装
找到模块的压缩包,解压,进入文件夹,执行命令:
> python setup.py install # 可以使用 python setup.py install --prefix=安装路径

六、python标准库

python标准库

1.介绍
2.内置函数
3.内置常量
3.1、所加入的常量site模块

4.内置类型

4.1、真值检验
4.2、布尔运算 : and,or,not
4.3、比较
4.4、数字类型 : int,float,complex
4.5、迭代器类型
4.6、序列类型 : list,tuple,range
4.7、文本序列类型 : str
4.8、二进制序列类型: bytes,bytearray,memoryview
4.9、设置类型 : set,frozenset
4.10、映射类型 : dict
4.11、上下文管理器类型
4.12、其他内置类型
4.13、特殊属性

5.内置异常

5.1、基类
5.2、具体异常
5.3、警告
5.4、异常层次结构

6.文本处理服务

6.1、string : 公共字符串操作
6.2、re : 正则表达式操作
6.3、difflib : 帮助计算增量
6.4、textwrap : 文本包装和填充
6.5、unicodedata : Unicode数据库
6.6、stringprep : 互联网字符串准备
6.7、readline : GNU readline界面
6.8、rlcompleter : GNU readline的完成功能

7.二进制数据服务

7.1、struct : 将字节解释为打包二进制数据
7.2、codecs : 编解码器注册表和基类

8.数据类型

8.1、datetime : 基本日期和时间类型
8.2、calendar : 日历相关功能
8.3、collections : 容器数据类型
8.4、collections.abc : 容器的抽象基类
8.5、heapq : 堆队列算法
8.6、bisect : 数组二分法
8.7、array : 数值的有效数组
8.8、weakref : 弱参考
8.9、types : 动态类型创建和内置类型的名称
8.10、copy : 浅和深复制操作
8.11、pprint : 数据漂亮的打印机
8.12、reprlib: 替代repr()实施
8.13、enum : 支持枚举

9.数值和数学模块

9.1、numbers : 数值抽象基类
9.2、math : 数学函数
9.3、cmath : 复数的数学函数
9.4、decimal : 十进制定点和浮点运算
9.5、fractions : 有理数
9.6、random : 生成伪随机数
9.7、statistics : 数学统计功能

10.功能编程模块

10.1、itertools : 为高效循环创建迭代器的函数
10.2、functools : 对可调用对象的高阶函数和操作
10.3、operator : 标准操作符作为函数

11.文件和目录访问

11.1、pathlib : 面向对象的文件系统路径
11.2、os.path : 公共路径名操作
11.3、fileinput : 从多个输入流的线路迭代
11.4、stat: 解释stat()结果
11.5、filecmp : 文件和目录比较
11.6、tempfile : 生成临时文件和目录
11.7、glob : Unix样式的路径名模式扩展
11.8、fnmatch : Unix文件名模式匹配
11.9、linecache : 随机访问文本行
11.10、shutil : 高级文件操作
11.11、macpath : Mac OS 9路径处理功能

12.数据持久性
12.1、pickle : Python对象序列化
12.2、copyreg : 注册pickle支持功能
12.3、shelve : Python对象持久化
12.4、marshal : 内部Python对象序列化
12.5、dbm : 接口到Unix“数据库”
12.6、sqlite3 : SQLite数据库的DB:API 2.0接口

13.数据压缩和归档

13.1、zlib : 压缩与gzip兼容
13.2、gzip : 支持gzip文件
13.3、bz2 :支持的bzip2压缩
13.4、lzma : 使用LZMA算法的压缩
13.5、zipfile : 使用ZIP存档
13.6、tarfile : 读取和写入tar存档文件

14.文件格式

14.1、csv : CSV文件读写
14.2、configparser : 配置文件解析器
14.3、netrc : netrc文件处理
14.4、xdrlib : 编码和解码XDR数据
14.5、plistlib: 生成和解析Mac OS X .plist文件

15.加密服务

15.1、hashlib : 安全散列和消息摘要
15.2、hmac : 消息认证的键控散列
15.3、secrets : 生成安全的随机数以管理秘密

16.通用操作系统服务

16.1、os : 其他操作系统接口
16.2、io : 用于处理流的核心工具
16.3、time : 时间访问和转换
16.4、argparse : 解析器,用于命令行选项,参数和子命令
16.5、getopt : 命令行选项的C样式解析器
16.6、logging : Python的日志记录工具
16.7、logging.config : 日志配置
16.8、logging.handlers : 日志处理程序
16.9、getpass : 便携式密码输入
16.10、curses : 字符单元显示的终端处理
16.11、curses.textpad : curses程序的文本输入小部件
16.12、curses.ascii : ASCII字符的实用程序
16.13、curses.panel : 诅咒的面板栈扩展
16.14、platform : 访问底层平台的标识数据
16.15、errno : 标准errno系统符号
16.16、ctypes : Python的外部函数库

17.并发执行

17.1、threading : 基于线程的并行性
17.2、multiprocessing : 基于进程的并行性
17.3、concurrent : 并发包
17.4、concurrent.futures : 启动并行任务
17.5、subprocess : 子过程管理
17.6、sched : 事件调度器
17.7、queue : 同步队列类
17.8、dummy_threading: threading模块的插入式更换
17.9、_thread : 低级线程API
17.10、_dummy_thread: _thread模块的插入式更换

18.进程间通信和网络

18.1、socket : 低级网络接口
18.2、ssl : 套接字对象的TLS / SSL包装器
18.3、select : 等待I / O完成
18.4、selectors : 高级I / O复用
18.5、asyncio : 异步I / O,事件循环,协同程序和任务
18.6、asyncore : 异步套接字处理程序
18.7、asynchat : 异步套接字命令/响应处理程序
18.8、signal : 为异步事件设置处理程序
18.9、mmap : 内存映射文件支持

19.互联网数据处理

19.1、email : 电子邮件和MIME处理包
19.2、json : JSON编码器和解码器
19.3、mailcap : Mailcap文件处理
19.4、mailbox : 处理各种格式的邮箱
19.5、mimetypes : 将文件名映射到MIME类型
19.6、base64 : Base16,Base32,Base64,Base85数据编码
19.7、binhex : 编码和解码binhex4文件
19.8、binascii : 在二进制和ASCII之间转换
19.9、quopri : 编码和解码MIME引用的可打印数据
19.10、uu : 编码和解码uuencode文件

20.HTML与XML

20.1、html : 超文本标记语言支持
20.2、html.parser : 简单的HTML和XHTML解析器
20.3、html.entities : HTML一般实体的定义
20.4、xml : XML处理模块
20.5、xml.etree.ElementTree : ElementTree XML API
20.6、xml.dom : 文档对象模型API
20.7、xml.dom.minidom : 小DOM实现
20.8、xml.dom.pulldom : 支持构建部分DOM树
20.9、xml.sax : 支持SAX2解析器
20.10、xml.sax.handler : SAX处理程序的基类
20.11、xml.sax.saxutils : SAX实用程序
20.12、xml.sax.xmlreader : XML解析器的接口
20.13、xml.parsers.expat : 快速XML解析使用Expat

21.互联网协议和支持

21.1、webbrowser : 方便的Web浏览器控制器
21.2、cgi : 公共网关接口支持
21.3、cgitb : CGI脚本的跟踪管理器
21.4、wsgiref : WSGI实用程序和参考实现
21.5、urllib : URL处理模块
21.6、urllib.request : 用于打开网址的可扩展库
21.7、urllib.response : urllib使用的响应类
21.8、urllib.parse : 将URL解析到组件中
21.9、urllib.error : 由urllib.request引发的异常类
21.10、urllib.robotparser : 解析器,用于robots.txt
21.11、http : HTTP模块
21.12、http.client : HTTP协议客户端
21.13、ftplib : FTP协议客户端
21.14、poplib : POP3协议客户端
21.15、imaplib : IMAP4协议客户端
21.16、nntplib : NNTP协议客户端
21.17、smtplib : SMTP协议客户端
21.18 smtpd : SMTP服务器
21.19、telnetlib : Telnet客户端
21.20、uuid : 根据RFC 4122的UUID对象
21.21、socketserver : 网络服务器的框架
21.22、http.server : HTTP服务器
21.23、http.cookies : HTTP状态管理
21.24、http.cookiejar : HTTP客户端的Cookie处理
21.25、xmlrpc : XMLRPC服务器和客户端模块
21.26、xmlrpc.client : XML:RPC客户端访问
21.27、xmlrpc.server : 基本XML:RPC服务器
21.28、ipaddress : IPv4 / IPv6操作库

22.多媒体服务

22.1、audioop : 处理原始音频数据
22.2、aifc : 读写AIFF和AIFC文件
22.3、sunau : 读写Sun AU文件
22.4、wave : 读写WAV文件
22.5、chunk : 读取IFF分块数据
22.6、colorsys : 颜色系统之间的转换
22.7、imghdr : 确定图像的类型
22.8、sndhdr : 确定声音文件的类型
22.9、ossaudiodev : 访问与OSS兼容的音频设备

23.国际化

23.1、gettext : 多语言国际化服务
23.2、locale : 国际化服务

24.方案框架

24.1、turtle : 海龟图形
24.2、cmd : 支持面向行的命令解释器
24.3、shlex : 简单的词汇分析

25.Tk的图形用户接口

25.1、tkinter : Tcl / Tk的Python接口
25.2、tkinter.ttk : Tk主题小部件
25.3、tkinter.tix : Tk的扩展小部件
25.4、tkinter.scrolledtext : 滚动文本小部件
25.5、闲
25.6、其他图形用户界面包

26.开发工具

26.1、typing : 支持类型提示
26.2、pydoc : 文档生成器和在线帮助系统
26.3、doctest : 测试交互式Python示例
26.4、unittest : 单元测试框架
26.5、unittest.mock : 模拟对象库
26.6、unittest.mock: 入门
26.7、2to3 : 自动化Python 2到3代码翻译
26.8、test : Python的回归测试包
26.9、test.support : Python测试套件的实用程序

27.调试和分析

27.1、bdb : 调试器框架
27.2、faulthandler : 转储Python回溯
27.3、pdb : Python调试器
27.4、Python分析器
27.5、timeit : 测量小代码片段的执行时间
27.6、trace : 跟踪或跟踪Python语句执行
27.7、tracemalloc : 跟踪内存分配

28.软件包装和分发

28.1、distutils : 构建和安装Python模块
28.2、ensurepip: 引导安装pip程序
28.3、venv : 创建虚拟环境
28.4、zipapp : 管理可执行的python zip档案

29.Python运行时服务

29.1、sys : 系统特定的参数和功能
29.2、sysconfig : 提供对Python的配置信息的访问
29.3、builtins : 内置对象
29.4、__main__ : 顶级脚本环境
29.5、warnings : 警告控制
29.6、contextlib: 用于with语句上下文的实用程序
29.7、abc : 抽象基类
29.8、atexit : 退出处理程序
29.9、traceback : 打印或检索堆栈跟踪
29.10、__future__ : 未来语句定义
29.11、gc : 垃圾收集器接口
29.12、inspect : 检查活对象
29.13、site : 站点特定的配置钩子
29.14、fpectl : 浮点异常控制

30.自定义Python解释器

30.1、code : 解释器基类
30.2、codeop : 编译Python代码

31.导入模块

31.1、zipimport : 从Zip档案导入模块
31.2、pkgutil : 软件包扩展实用程序
31.3、modulefinder : 查找脚本使用的模块
31.4、runpy : 定位和执行Python模块
31.5、importlib: 实施import

32.Python语言服务

32.1、parser : 访问Python解析树
32.2、ast : 抽象语法树
32.3、symtable : 访问编译器的符号表
32.4、symbol : 用于Python解析树的常量
32.5、token : 用于Python解析树的常量
32.6、keyword : 测试Python关键字
32.7、tokenize : Tokenizer的Python源代码
32.8、tabnanny : 检测模糊缩进
32.9、pyclbr : Python类浏览器支持
32.10、py_compile : 编译Python源文件
32.11、compileall : 字节编译Python库
32.12、dis : Python字节码的反汇编
32.13、pickletools : 工具的腌菜开发商

33.其他

33.1、formatter : 通用输出格式

34.MS Windows特定服务

34.1、msilib : 读取和写入Microsoft Installer文件
34.2、msvcrt : 从MS VC ++运行时的有用的例程
34.3、winreg : Windows注册表访问
34.4、winsound : Windows的声音播放界面

35.Unix特定服务

35.1、posix : 常见的POSIX系统调用
35.2、pwd : 密码数据库
35.3、spwd : shadow密码数据库
35.4、grp : 组数据库
35.5、crypt : 检查Unix密码的功能
35.6、termios : POSIX样式tty控件
35.7、tty : 端子控制功能
35.8、pty : 伪终端实用程序
35.9、fcntl : fcntl和ioctl系统调用
35.10、pipes : 外壳管道接口
35.11、resource : 资源使用信息
35.12、nis : Sun的NIS接口(黄页)
35.13、syslog : Unix系统日志库例程

36.取代模块

36.1、optparse : 解析器,用于命令行选项
36.2、imp : 访问import内部

37.未记录的模块

37.1、平台特定模块

持续更新…

最后更新: 2018年12月04日 14:32

原始链接: http://pythonfood.github.io/2017/12/30/python模块和包/

× 多少都行~
打赏二维码