标准库中最有用的Python模块?

时间:2009-09-21 10:52:52

标签: python module standard-library

我正在巴黎大学教授研究生水平的Python课程,学生需要被引入标准库。我想与他们讨论一些最重要的标准模块。

您认为哪些模块绝对必须?尽管响应可能因您的领域(网络编程,科学等)而异,但我觉得通常需要一些模块:mathsysre,{{1} },osos.path,...也许:loggingcollections,...

您建议我在1小时或2小时的时间内提出哪些模块?

16 个答案:

答案 0 :(得分:41)

在1-2小时内完成的模块完全取决于观众的兴趣或重点。还有哪些课程?他们准备立即使用什么?

请务必提及mathdecimaldatetime以及timere

对于将要进行面向文件工作的IT类型:globfnmatchosos.pathtempfile和{{1 }}

数据库人员必须了解shutilsqlite

模拟受众可能希望了解json

Web开发人员必须从客户的角度来了解random。还有美丽的汤和您选择的XML解析器。

从服务器的角度来看,Web开发人员必须了解urllib2logging

答案 1 :(得分:32)

我会提供itertoolsfunctools。这些模块在编程中随处可见的抽象操作,所以我认为它们对学习很有用。在更实际的事情中,xml模块(xml.domxml.sax)非常有用。

答案 2 :(得分:18)

查看PyMOTW(本周的Python模块)。虽然它不是严格的stdlib,但它是python stdlib明显而不那么明显的宝石的重要资源。更重要的是,它还可以作为所介绍模块的优秀文档。

答案 3 :(得分:7)

我会选择一些模块,这些模块对于执行典型计算机任务的典型计算机用户/程序员最有意义。这样,他们在自己的时间内实际上使用 python的可能性最大。

在我看来,大多数人可能会执行的操作是文件操作,例如遍历目录中的每个文件并对其执行某些操作。

因此,我会说模块: os和os.path 可能是最重要的,还提到 glob,fnmatch和shutil 。此外,子流程也可能非常有用,因为它往往会在上面提到的上下文中使用。

最后,我会选择 optparse ,因为这样可以让他们快速制作可用的,程序员友好的程序,这有望鼓励他们实际编写其他人想要的程序使用

答案 4 :(得分:6)

这取决于他们将要做什么以及他们的水平。 我希望有人在我开始时向我指出的一些模块是:

  • StringIO - 阻止他们重新实现它,如果他们没有发现它们,他们就会这样做。
  • 日志记录 - 在调试打印输出时将它们放在正确的路径上
  • pickle - 阻止他们到处尝试使用XML。
  • xml.etree.ElementTree - 在实际需要使用XML时将它们保存在DOM模型中。
  • pprint - 使python中的嵌套结构不那么令人生畏。

答案 5 :(得分:6)

我只记得一个非常实用的模块:复制。
我经常使用deepcopy()。

答案 6 :(得分:5)

我会将urllib2添加到列表中。

答案 7 :(得分:5)

在一两个小时的插槽中,我会介绍easy_installPyPI repository:即使它们不在标准库中,它们也可以安装许多其他外部模块,它当你在标准的lib中找不到时,它是第一个看的地方。

除此之外,我会介绍numpy,re,doctest / unittest,也许是pickle。

答案 8 :(得分:4)

operator,旁边已经提到过。

答案 9 :(得分:3)

不要忘记datetime,weakref,pickle,StringIO,heapq,可能是线程。

numpy也值得一提,虽然它不是来自标准库。

答案 10 :(得分:3)

os和os.path:因为这些是任何人在python中编写与平台无关的代码所需的核心模块,学生可以在学习os和os.path之后从shell脚本切换到python脚本。

答案 11 :(得分:2)

我认为除了sys之外,每个人都拥有所有重要的人。如果你看一下实际的Python代码,sys可能是最常用的模块之一(通常是因为sys.version)。

此外,它不是真正的模块,但我会提到__future__

没有人应该在没有import this的情况下使用Python。

答案 12 :(得分:1)

除了你提到的那些,我发现subprocess和sqlite3模块特别有用。但我当然建议学生自己查看标准库模块列表。另外,从标准库以外的模块中,我会提到numpy(或numarray)和pyparsing。

答案 13 :(得分:1)

我对decimal模块施加了一些重视。如果他们是编程的初学者,他们肯定不会意识到floating point accuracy的含义。如果使用货币或其他必须通过几个数学运算保留精确小数精度的单位,decimal模块非常有价值。

当然,当你时,你可能想要触及那些情况。

答案 14 :(得分:1)

对于理科学生来说,一个很少听到但功能强大的模块'networkx'将是有价值的。但他们需要先安装它。该模块有详细记录:http://networkx.lanl.gov/index.html

答案 15 :(得分:1)

没有timeit

很难生存
>>> # 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 ~]$