导入一个模块后,开发者往往需要知道该模块包含哪些函数,比如它包含哪些变量、函数、类,也希望查看模块中各个成员的帮助信息,以便模块可以使用通常只有掌握这些信息。
为了查看一个模块包含什么,有两种方法:
使用 dir() 函数。
使用模块本身提供的 __all__ 变量。
dir()函数的基本用法在上一章已经介绍过了。该函数可用于返回模块或类中包含的所有程序单元(包括变量、函数、类、方法等),但直接使用dir()函数会列出默认模块中的所有程序单元,包括以下划线开头的程序单元,而这些以下划线开头的程序单元实际上并不期望被外界使用。
例如,在 Python 的交互式解释器中执行以下命令,导入字符串模块(Python 内置的丰富字符串函数的模块):
>>> import string
然后使用 dir() 函数查看模块的内容,你会看到如下输出:
>>> dir(string)
['Formatter', 'Template', '_ChainMap', '_TemplateMetaclass', '__all__', '__builtins__', '__cached__', '__doc__',
'__file__', '__loader__', '__name__', '__package__', '__spec__', '_re', '_string', 'ascii_letters',
'ascii_lowercase', 'ascii_uppercase', 'capwords', 'digits', 'hexdigits', 'octdigits', 'printable', 'punctuation',
'whitespace']
显然,这个模块中有很多以下划线开头的程序单元。事实上,这些程序单元并不打算被其他程序使用,因此列出这些程序单元是没有意义的。
为了过滤那些以下划线开头的程序单元,我们可以使用以下列表推导来列出模块中的程序单元:
>>> [e for e in dir(string) if not e.startswith('_')]
['Formatter', 'Template', 'ascii_letters', 'ascii_lowercase', 'ascii_uppercase', 'capwords', 'digits', 'hexdigits',
'octdigits', 'printable', 'punctuation', 'whitespace']
此命令使用 for 循环的列表推导来列出 dir(string) 返回的所有不以下划线开头的程序单元,这些程序单元是模块期望其他程序使用的程序单元。
另外,模块中的__all__变量在本章前面已经介绍过了,相当于模块的开放功能接口,所以也可以通过模块的__all__变量查看模块中的程序单元。例如,在交互式解释器中输入以下命令:
>>> string.__all__
['ascii_letters', 'ascii_lowercase', 'ascii_uppercase', 'capwords', 'digits', 'hexdigits', 'octdigits', 'printable',
'punctuation', 'whitespace', 'Formatter', 'Template']
对比前面列表推导列出的结果和这里__all__变量列出的结果,不难发现两者的输出结果大致相同,也就是说可以查看模块中包含的程序单元使用这两种方法。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python3支持nltk吗?01/08
- ♥ python如何输出中文08/30
- ♥ 5 分钟掌握 Python 中常见的配置文件01/18
- ♥ 什么是 Python 对称差分?09/21
- ♥ Python元组数据类型解释10/25
- ♥ 如何在python中手动输入文本09/29
内容反馈