Python强大的自有模块——标准库

引言:Python的强大体现在“模块自信”上,因为Python不仅有很强大的自有模块(标准库),还有海量的第三方模块(或者包、库),并且很多开发者还在不断贡献在自己开发的新模块(或者包、库)。本文将向大家概述介绍Python的自有模块——标准库。

本文选自《跟老齐学Python:轻松入门》。

  “Python自带‘电池’”,这种说法流传已久。

  在Python被安装的时候,就有不少模块也随着安装到本地的计算机上了。这些东西就如同“电力”一样,让Python拥有了无限生机,能够轻而易举地免费使用很多模块。所以,称其为“自带电池”。

  那些在安装Python时就默认已经安装好的模块被统称为“标准库”。

  熟悉标准库是学习编程必须要做的事。

引用的方式

  所有模块都服从下述引用方式,以下是最基本的,也是最常用的,还是可读性非常好的引用方式。

import modulename

  例如:

>>> import pprint
>>> a = {"lang":"python", "book":"www.itdiffer.com", "teacher":"qiwsir", "goal":"from beginner to master"}
>> pprint.pprint(a)
{‘book‘: ‘www.itdiffer.com‘,
 ‘goal‘: ‘from beginner to master‘,
 ‘lang‘: ‘python‘,
 ‘teacher‘: ‘qiwsir‘}

  在对模块进行说明的过程中,以标准库pprint为例。

  以pprint.pprint()的方式使用模块中的一种方法,这种方法能够让字典格式化输出。看看结果是不是比原来更容易阅读了呢?

  在import后面,理论上可以跟好多模块名称。但是在实践中,还是建议大家一次一个名称,太多了不容易阅读。

这是用import pprint样式引入模块,并以点号“.”(英文半角)的形式引用其方法。

关于引入模块的方式,前文介绍import语句时已经讲过,这里再次罗列,权当复习。

>>> from pprint import pprint

  意思是从pprint模块中只将pprint()引入,之后就可以直接使用它了。

>>> pprint(a)
{‘book‘: ‘www.itdiffer.com‘,
 ‘goal‘: ‘from beginner to master‘,
 ‘lang‘: ‘python‘,
 ‘teacher‘: ‘qiwsir‘}

  再懒一些还可以这样操作:

>>> from pprint import *

  这就将pprint模块中的一切都引入了,于是可以像上面那样直接使用模块中的所有可用的内容。

  诚然,如果很明确使用模块中的哪些方法或属性,那么使用类似from modulename import name1, name2, name3...也未尝不可。需要再次提醒读者注意的是,不能因为引入了模块而降低了可读性,让别人不知道呈现在眼前的方法是从何而来的。

  有时候引入的模块或者方法名称有点长,这时可以给它重命名。如:

>>> import pprint as pr
>>> pr.pprint(a)
{‘book‘: ‘www.itdiffer.com‘,
 ‘goal‘: ‘from beginner to master‘,
 ‘lang‘: ‘python‘,
 ‘teacher‘: ‘qiwsir‘}

  当然,还可以这样操作:

>>> from pprint import pprint as pt
>>> pt(a)
{‘book‘: ‘www.itdiffer.com‘,
 ‘goal‘: ‘from beginner to master‘,
 ‘lang‘: ‘python‘,
 ‘teacher‘: ‘qiwsir‘}

  但是不管怎样,一定要让别人看得懂,且要过了若干时间,自己也还能看得懂。

深入探究

  继续以pprint为例,深入研究:

>>> import pprint
>>> dir(pprint)
[‘PrettyPrinter‘, ‘_StringIO‘, ‘__all__‘, ‘__builtins__‘, ‘__doc__‘, ‘__file__‘, ‘__name__‘, ‘__package__‘, ‘_commajoin‘, ‘_id‘, ‘_len‘, ‘_perfcheck‘, ‘_recursion‘, ‘_safe_repr‘, ‘_sorted‘, ‘_sys‘, ‘_type‘, ‘isreadable‘, ‘isrecursive‘, ‘pformat‘, ‘pprint‘, ‘saferepr‘, ‘warnings‘]

  对dir()并不陌生,从结果中可以看到pprint的属性和方法。其中有的是以双画线、单画线开头的,为了不影响我们的视觉,先把它们去掉。

>>> [ m for m in dir(pprint) if not m.startswith(‘_‘) ]
[‘PrettyPrinter‘, ‘isreadable‘, ‘isrecursive‘, ‘pformat‘, ‘pprint‘, ‘saferepr‘, ‘warnings‘]

  针对这几个,为了能够搞清楚它们的含义,可以使用help(),比如:

>>> help(isreadable)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name ‘isreadable‘ is not defined

  这样做是错误的。大家知道错在何处吗?

>>> help(pprint.isreadable)

  前面是用import pprint方式引入模块的。

Help on function isreadable in module pprint:

isreadable(object)
    Determine if saferepr(object) is readable by eval().

  通过帮助信息,能够查看到该方法的详细说明。可以用这种方法一个一个地查看,反正也不多,对每个方法都要熟悉。

  需要注意的是,pprint.PrettyPrinter是一个类,后面的是方法。

  再回头看看dir(pprint)的结果:

>>> pprint.__all__
[‘pprint‘, ‘pformat‘, ‘isreadable‘, ‘isrecursive‘, ‘saferepr‘, ‘PrettyPrinter‘]

  这个结果是不是很眼熟?除了"warnings"之外,跟前面通过列表解析式得到的结果一样。

  其实,当我们使用from pprint import *的时候,就是将__all__里面的方法引入。

帮助、文档和源码

  你能记住每个模块的属性和方法吗?比如前面刚刚查询过的pprint模块中的属性和方法,现在能背诵出来吗?相信大部分人是记不住的。所以,我们需要使用dir()和help()。

>>> print(pprint.__doc__)
Support to pretty-print lists, tuples, & dictionaries recursively.

Very simple, but useful, especially in debugging data structures.

Classes
-------
PrettyPrinter()
    Handle pretty-printing operations onto a stream using a configured
    set of formatting parameters.

Functions
---------

pformat()
    Format a Python object into a pretty-printed representation.

pprint()
    Pretty-print a Python object to a stream [default is sys.stdout].

saferepr()
    Generate a ‘standard‘ repr()-like value, but protect against recursive
    data structures.

  pprint.__doc__是查看整个类的文档,还知道整个文档是写在什么地方的吗?

  还是使用pm.py文件,增加如下内容:

#!/usr/bin/env python
# coding=utf-8

"""        #增加的
This is a document of the python module.  #增加的
"""        #增加的

def lang():
    ...    #省略了,后面的也省略了

  在这个文件的开始部分,所有类、方法和import之前,写一个用三个引号包裹着的字符串,这就是文档。

>>> import sys
>>> sys.path.append("~/Documents/VBS/StarterLearningPython/2code")
>>> import pm
>>> print(pm.__doc__)

This is a document of the python module.

  这就是撰写模块文档的方法,即在.py文件的最开始写相应的内容。这个要求应该成为开发者的习惯。

  对于Python的标准库和第三方模块,不仅可以查看帮助信息和文档,而且还能够查看源码,因为它是开放的。

  还是回到dir(pprint)中找一找,有一个__file__属性,它会告诉我们这个模块的位置:

>>> print(pprint.__file__)
/usr/lib/python3.4/pprint.py

  接下来就可以查看这个文件的源码:

$ more /usr/lib/python3.4/pprint.py
#  Author:      Fred L. Drake, Jr.
……
"""Support to pretty-print lists, tuples, & dictionaries recursively.

Very simple, but useful, especially in debugging data structures.

Classes
-------
PrettyPrinter()
    Handle pretty-printing operations onto a stream using a configured
    set of formatting parameters.

Functions
---------

pformat()
    Format a Python object into a pretty-printed representation

.....
"""

  这里只查抄了文档中的部分信息,是不是跟前面通过__doc__查看的结果一样呢?

  请读者在闲暇时间阅读源码。事实证明,这种标准库中的源码是质量最好的。阅读高质量的代码是提高编程水平的途径之一。

  本文选自《跟老齐学Python:轻松入门》,点此链接可在博文视点官网查看此书。

                    

  想及时获得更多精彩文章,可在微信中搜索“博文视点”或者扫描下方二维码并关注。

                       

时间: 2024-10-12 20:31:42

Python强大的自有模块——标准库的相关文章

Python学习笔记13:标准库之子进程(subprocess包)

ubprocess包主要功能是执行外部的命令和程序.从这个意义上来说,subprocess的功能与shell类似. subprocess以及常用的封装函数 当我们运行python的时候,我们都是在创建并运行一个进程. 在Python中,我们通过标准库中的subprocess包来fork一个子进程,并运行一个外部的程序. subprocess包中定义有数个创建子进程的函数,这些函数分别以不同的方式创建子进程,所以我们可以根据需要来从中选取一个使用. 另外subprocess还提供了一些管理标准流(

python的一些常用的标准库

一.sys 这是一个用来跟python解释器交互的模块. sys.argv 用来想python解释器传递参数,也叫"命令行参数". 代码如下: #coding=utf-8 import sys print "The file name:",sys.argv[0] print "The number of arg:",len(sys.argv) print "Thr arg is:",str(sys.argv) 执行:pytho

Python学习笔记16:标准库之多线程(threading包)

Python主要通过标准库中的threading包来实现多线程. 当今网络时代,每个服务器都会接收到大量的请求.服务器可以利用多线程的方式来处理这些请求,以提高对网络端口的读写效率. Python是一种网络服务器的后台工作语言 (比如豆瓣网),所以多线程也就很自然被Python语言支持. 多线程售票以及同步 我们使用Python来实现Linux多线程与同步文中的售票程序. 我们使用mutex (也就是Python中的Lock类对象) 来实现线程的同步: import threading impo

Python学习笔记16:标准库多线程(threading包裹)

Python主要是通过标准库threading包来实现多线程. 今天,互联网时代,所有的server您将收到大量请求. server要利用多线程的方式的优势来处理这些请求,为了改善网络port读写效率. Python它是一个网络server后台工作语言 (豆瓣网),所以多线程也就非常自然被Python语言支持. 多线程售票以及同步 我们使用Python来实现Linux多线程与同步文中的售票程序. 我们使用mutex (也就是Python中的Lock类对象) 来实现线程的同步: import th

Python学习笔记15:标准库之获取进程信息(os包)

Python的os包中有查询和修改进程信息的函数. 进程信息 os包中相关函数如下: uname() 返回操作系统相关信息,类似于Linux上的uname命令. umask() 设置该进程创建文件时的权限mask,类似于Linux上的umask命令. get*() 查询 (*由以下代替) uid, euid, resuid, gid, egid, resgid :权限相关,其中resuid主要用来返回saved UID. pid, pgid, ppid, sid                

python collections模块-标准库

参考老顽童博客,他写的很详细,例子也很容易操作和理解. 1.模块简介 collections包含了一些特殊的容器,针对Python内置的容器,例如list.dict.set和tuple,提供了另一种选择: namedtuple,可以创建包含名称的tuple: deque,类似于list的容器,可以快速的在队列头部和尾部添加.删除元素: Counter,dict的子类,计算可hash的对象: OrderedDict,dict的子类,可以记住元素的添加顺序: defaultdict,dict的子类,

Python学习笔记9:标准库之日期时间(time包,datetime包)

一 time包 sleep([float time]) 延迟一段以浮点数表示的秒数 time包基于C语言的库函数(library functions). Python的解释器一般是用C编写的,Python的一些函数也会直接调用C语言的库函数. time.time()获得当前时间,返回float型, 单位:秒 time.clock()在UNIX系统上,它返回的是"进程时间",它是用秒表示的浮点数(时间戳). 而在WINDOWS中,第一次调用,返回的是进程执行的实际时间.而第二次之后的调用

Python 复习(五) 标准库复习

2019-02-21 19:45:47 话不多说,开始! Python 二级要求掌握的库有:turtle.random.time.其他库有request.jieba等,都比较简单,现在开始复习. (一) turtle库 画图.导入方式 import turtle as t 1.1 窗体函数 t.setup(width,lenth,startx,starty).turtle默认起始点是中心点,以前右为正. 1.2 画笔状态 画笔状态函数 pensize()/width() 设置画笔宽度 penup

【python基础】time模块(库)方法汇总

一.time python自带的管理时间的模块 二.表示 1.时间戳:某个时间距离1970-01-01 00:00:00的秒数*(计算机用来记录时间)   时间戳 ——> 浮点数 基准时间:1970-01-01 00:00:00 2.时间元组:(在程序中操作时间) 3.时间字符串: '2019-08-15', '2019年8月15号', '08/15/2019'(方便人看的) 三.方法 1.time.sleep() : 睡眠功能, 让程序等待多少秒以后再执行 2.time.time() : 时间