标准库中最有用的Python模块?
我在巴黎大学教授研究生水平的Python课程,学生需要介绍标准库。 我想和他们讨论一些最重要的标准模块。
你认为哪些模块是绝对必须的? 即使响应可能取决于你的领域(networking编程,科学等),我觉得一些模块是常见的需要: math
, sys
, re
, os
, os
os.path
, logging
,…也许: collections
, struct
, …
你会build议我在一个或两个小时的时间内给出什么模块?
在1-2个小时内完成的模块完全取决于观众的兴趣或重点。 还有什么课程? 他们准备立即使用什么?
一定要提及math
, decimal
和datetime
time
和re
。
对于将要进行面向文件工作的ITtypes: glob
, fnmatch
, os
, os.path
, tempfile
和shutil
。
数据库人员必须听说关于sqlite
和json
。
模拟观众可能想听到random
。
Web开发人员必须从客户的angular度来听取关于urllib2
信息。 还有美丽的汤和您select的XMLparsing器。
Web开发人员必须从服务器angular度来听取有关logging
和wsgiref
信息。
我会提供itertools
和functools
。 这些模块对编程中随处可见的抽象进行操作,所以我认为它们对学习是有用的。 在更实际的事情中,xml模块( xml.dom
, xml.sax
)可能非常有用。
看看PyMOTW (本周的Python模块)。 虽然它不是严格的stdlib,但是它是python stdlib的一个明显而不是明显的宝贵资源。 更重要的是,它也是引入模块的优秀文档。
我会去找几个模块,这些模块对于执行典型计算机任务的典型计算机用户/程序员是最有意义的。 那样的话,他们有可能在自己的时间使用 python的机会最大。
在我看来,大多数人可能会执行的操作是文件操作,例如遍历目录中的每个文件并对其执行一些操作。
因此,我会说模块: os和os.path可能是最重要的,也提到glob,fnmatch和shutil 。 另外, subprocess也可能非常有用,因为它往往被用在上面提到的上下文中。
最后,我会selectoptparse ,因为这将使他们很快地制作可用的,程序员友好的程序,希望这也会鼓励他们真正编写其他人希望使用的程序。
这取决于他们将要做什么,他们是什么水平。 我希望有人在我开始时向我指出的一些模块是:
- StringIO – 阻止它们重新实现它,如果它们没有发现它们,将会停止它们。
- 日志logging – 在debugging打印输出时将它们放在正确的path上
- 腌制 – 阻止他们试图在任何地方使用XML。
- xml.etree.ElementTree – 在实际需要使用XML时将其从DOM模型中保存。
- pprint – 使python中的嵌套结构不那么吓人。
我会将urllib2添加到列表中。
在只有两个小时的插槽中,我将介绍easy_install和PyPI存储库 :即使它们不在标准库中,它们也允许您安装许多其他外部模块,并且它是您可以查看的第一个地方在标准库中找不到。
除此之外,我会引入numpy,re,doctest / unittest,也许pickle。
我只记得一个非常实用的模块:复制。
我经常使用它的deepcopy()。
operator
,旁边已经提到。
不要忘记datetime,weakref,pickle,StringIO,heapq,可能是线程。
而且numpy也值得一提,虽然不是来自标准库。
os和os.path:因为这些是任何人都需要在python中编写平台独立代码所需的核心模块,学生可以在学习os和os.path之后从shell脚本切换到python脚本。
我认为这里的每个人都得到了所有重要的,除了sys
。 如果你看看实际的Python代码, sys
可能是最常用的模块之一(通常是因为sys.version
)。
另外,它不是一个真正的模块,但我会提到__future__
。
没有任何人应该使用Python而不进行import this
。
除了你提到的,我发现subprocess和sqlite3模块特别有用。 但是我当然会build议学生们看一下标准库模块本身的列表。 另外,从标准库之外的模块,我会提到numpy(或numarray)和pyparsing。
我会把一些重量放在decimal
模块上。 如果他们是编程初学者,他们当然不会意识到浮点精度的影响。 如果使用通过多次math运算必须保留精确小数精度的货币或其他单位, decimal
模块是非常有价值的。
当然,如果你不需要那么准确的话,你可能会想要触及一些情况。
对于理科学生来说,一个很less听到但function强大的模块“networkx”将是有价值的。 但他们需要先安装它。 这个模块有很好的文档: http : //networkx.lanl.gov/index.html
没有时间是很难活的
>>> # Python shell usage ... import timeit >>> tt = timeit.Timer("foo = 'time this'", "print 'setup with this arg'") >>> tt.timeit(number=1000) setup with this arg 0.00021100044250488281 >>> [mpenning@Bucksnort ~]$ # Bash shell usage [mpenning@Bucksnort ~]$ # 5 runs with 1000 samples each. [mpenning@Bucksnort ~]$ python -m timeit -n 1000 -r 5 -s "print 'setup w/ this arg'" \ "foo = 'time this'" setup w/ this arg setup w/ this arg setup w/ this arg setup w/ this arg setup w/ this arg 1000 loops, best of 5: 0.173 usec per loop [mpenning@Bucksnort ~]$
一定要添加BeautifulSoup 。 最好的(如果不是最好的)HTMLparsing器之一。
编辑:
糟糕的是,这不是一个“标准”模块本身 ,但它应该是如果你做HTMLparsing。