10.3 标准库:一些深受欢迎的模块
在Python中,短语“开箱即用”(batteries included)最初是由Frank Stajano提出的,指的是Python丰富的标准库。安装Python后,你就免费获得了大量很有用的模块。鉴于有很多方式可以获取有关这些模块的详细信息(本章前面介绍过),这里不打算提供完整的参考手册(如果这样做将占据很大的篇幅),而只是描述几个我喜欢的标准模块,以激发你的探索兴趣。在本书后面介绍项目的章节(第20章~第29章)中,你将遇到其他的标准模块。这里对模块的描述并非面面俱到,只是将重点放在模块的一些有趣功能上。
10.3.1 sys
模块sys让你能够访问与Python解释器紧密相关的变量和函数,表10-2列出了其中的一些。
表10-2 模块sys中一些重要的函数和变量
函数/变量 描 述
argv 命令行参数,包括脚本名
exit([arg]) 退出当前程序,可通过可选参数指定返回值或错误消息
modules 一个字典,将模块名映射到加载的模块
path 一个列表,包含要在其中查找模块的目录的名称
platform 一个平台标识符,如sunos5或win32
stdin 标准输入流——一个类似于文件的对象
stdout 标准输出流——一个类似于文件的对象
stderr 标准错误流——一个类似于文件的对象
变量sys.argv包含传递给Python解释器的参数,其中包括脚本名。
函数sys.exit退出当前程序。(在第8章讨论的try/finally块中调用它时,finally子句依然会执行。)你可向它提供一个整数,指出程序是否成功,这是一种UNIX约定。在大多数情况下,使用该参数的默认值(0,表示成功)即可。也可向它提供一个字符串,这个字符串将成为错误消息,对用户找出程序终止的原因很有帮助。在这种情况下,程序退出时将显示指定的错误消息以及一个表示失败的编码。
映射sys.modules将模块名映射到模块(仅限于当前已导入的模块)。
变量sys.path在本章前面讨论过,它是一个字符串列表,其中的每个字符串都是一个目录名,执行import语句时将在这些目录中查找模块。
变量sys.platform(一个字符串)是运行解释器的“平台”名称。这可能是表示操作系统的名称(如sunos5或win32),也可能是表示其他平台类型(如Java虚拟机)的名称(如java1.4.0)——如果你运行的是Jython。
变量sys.stdin、 sys.stdout和sys.stderr是类似于文件的流对象,表示标准的UNIX概念:标准输入、标准输出和标准错误。简单地说, Python从sys.stdin获取输入(例如,用于input中),并将输出打印到sys.stdout。有关文件和这三个流的详细信息,请参阅第11章。
举个例子,来看看按相反顺序打印参数的问题。从命令行调用Python脚本时,你可能指定一些参数,也就是所谓的命令行参数。这些参数将放在列表sys.argv中,其中sys.argv[0]为Python脚本名。按相反的顺序打印这些参数非常容易,如代码清单10-5所示。
代码清单10-5 反转并打印命令行参数
# reverseargs.py
import sys
args = sys.argv[1:]
args.reverse()
print(' '.join(args))
如你所见,我创建了一个sys.argv的副本。也可修改sys.argv,但一般而言,不这样做更安全,因为程序的其他部分可能依赖于包含原始参数的sys.argv。另外,注意到我跳过了sys.argv的第一个元素,即脚本的名称。我使用args.reverse()反转这个列表,但不能打印这个操作的返回值,因为它就地修改列表并返回None。下面是另一种解决方案:
print(' '.join(reversed(sys.argv[1:])))
最后,为美化输出,我使用了字符串的方法join。下面来尝试运行这个程序(假设使用的是bash shell)。
$ python reverseargs.py this is a test
领取专属 10元无门槛券
私享最新 技术干货