Python 探索Python的模块和对象

Python 探索Python的模块和对象,在Python解释器中可以直接交互式地探索模块和对象。这是一个被低估的特性,很容易被忽略,特别是对于刚刚从另一门语言切换到Python的人来说,更是如此。
对于许多编程语言来说,如果不查阅在线文档或认真学习接口定义,那么很难了解包或类的内部内容。
Python就不一样,高效的开发人员会花费大量时间在Python的REPL会话中交互式地使用解释器。我就经常在REPL会话中编写小段代码,然后将其复制粘贴到编辑器正在处理的Python文件中。
本节将介绍两种用于在解释器中交互式地探索Python类和方法的简单技巧。
这些技巧可用于以任何方式安装的Python,只需要在命令行中使用python命令启动Python解释器即可。这特别适合在无法使用高级编辑器或IDE的系统上调试会话,比如在终端会话中通过网络工作(ssh)。
准备好了吗?让我们开始吧!假设你正在编写一个程序,它使用Python标准库中的datetime模块。那么如何确定这个模块能导出哪些函数或类,以及这些类中有哪些方法和属性呢?
一种方法是使用搜索引擎或在网上查找官方的Python文档,而使用Python内置的dir()函数能直接在Python REPL中访问这些信息:

>>> import datetime
>>> dir(datetime)
['MAXYEAR', 'MINYEAR', '__builtins__', '__cached__',
'__doc__', '__file__', '__loader__', '__name__',
'__package__', '__spec__', '_divide_and_round',
'date', 'datetime', 'datetime_CAPI', 'time',
'timedelta', 'timezone', 'tzinfo']

在上面的例子中,首先从标准库导入datetime模块,然后用dir()函数查看这个模块。在模块上调用dir()可以得到按字母顺序排列的名称和属性列表。
由于Python中的一切皆为对象,因此这个技巧不仅适用于模块本身,还可用于模块导出的类和数据结构。
事实上,还可以对感兴趣的对象继续调用dir()。例如下面查看了datetime.date类:

>>> dir(datetime.date)
['__add__', '__class__', ..., 'day', 'fromordinal',
'isocalendar', 'isoformat', 'isoweekday', 'max', 'min',
'month', 'replace', 'resolution', 'strftime',
'timetuple', 'today', 'toordinal', 'weekday', 'year']

从中可以看到,dir()能够让你快速浏览模块或类中可用的内容。如果不记得某个特定类或函数的确切拼写,使用dir()无须中断当前编码流程就能查看相关信息。
在复杂的模块或类这样的对象上调用dir()时,有时可能会产生冗长且难以快速阅读的输出内容。可以用下面这个小技巧过滤出感兴趣的属性列表:

>>> [_ for _ in dir(datetime) if 'date' in _.lower()]
['date', 'datetime', 'datetime_CAPI']

这里使用列表解析式来过滤dir(datetime)调用的结果,仅显示包含单词date的名称。注意,我在每个名称上都调用了lower()方法,以确保过滤时不区分大小写。
仅列出对象的属性有时并不足以解决手头的问题。那么关于datetime模块导出的函数和类,怎样才能获得更多、更详细的信息呢?
可以使用Python内置的help()函数,以在Python的交互式帮助系统中浏览所有Python对象自动生成的文档:

>>> help(datetime)

如果在Python解释器会话中运行上述示例,那么终端将显示基于文本的帮助页面,其中有datetime模块的相关信息,如下所示:

Help on module datetime:

NAME
    datetime - Fast implementation of the datetime type.

CLASSES
    builtins.object
        date
            datetime
        time

使用光标上下键能滚动文档。按空格键会一次向下滚动几行。按q键会退出交互式帮助模式,回到解释器会话中。很不错的功能,对吧?
顺便说一句,可以在所有Python对象上调用help(),包括其他内置函数和自定义的Python类。Python解释器会根据对象及其文档字符串(如果有的话)自动生成帮助文档。下面的help()函数使用方式都是正确的:

>>> help(datetime.date)
>>> help(datetime.date.fromtimestamp)
>>> help(dir)

当然,dir()help()还是比不上格式良好的HTML文档、搜索引擎或Stack Overflow。但这两个函数可用来在不离开Python解释器的情况下快速查找相关内容,同时还可以脱机使用,在特定情况下非常有用。

关键要点

  • 使用内置的dir()函数可以在Python解释器会话中交互式地探索模块和类。

  • 内置的help()函数可用来直接在解释器中浏览文档(按q键退出)。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程