sakuraie

查看模块成员:dir()函数

通过 dir() 函数,我们可以查看某指定模块包含的全部成员(包括变量、函数和类)。注意这里所指的全部成员,不仅包含可供我们调用的模块成员,还包含所有名称以双下划线“__”开头和结尾的成员,而这些“特殊”命名的成员,是为了在本模块中使用的,并不希望被其它文件调用。

这里以导入 string 模块为例,string 模块包含操作字符串相关的大量方法,下面通过 dir() 函数查看该模块中包含哪些成员:

import string
print(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\']

可以看到,通过 dir() 函数获取到的模块成员,不仅包含供外部文件使用的成员,还包含很多“特殊”(名称以 2 个下划线开头和结束)的成员,列出这些成员,对我们并没有实际意义。

因此,这里给读者推荐一种可以忽略显示 dir() 函数输出的特殊成员的方法。仍以 string 模块为例:

import string
print([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\']

显然通过列表推导式,可在 dir() 函数输出结果的基础上,筛选出对我们有用的成员并显示出来。

查看模块成员:__all__变量

除了使用 dir() 函数之外,还可以使用 __all__ 变量,借助该变量也可以查看模块(包)内包含的所有成员。

仍以 string 模块为例,举个例子:

import string
print(string.__all__)

程序执行结果为:

[\'ascii_letters\', \'ascii_lowercase\', \'ascii_uppercase\', \'capwords\', \'digits\', \'hexdigits\', \'octdigits\', \'printable\', \'punctuation\', \'whitespace\', \'Formatter\', \'Template\']

显然,和 dir() 函数相比,__all__ 变量在查看指定模块成员时,它不会显示模块中的特殊成员,同时还会根据成员的名称进行排序显示。

不过需要注意的是,并非所有的模块都支持使用 __all__ 变量,因此对于获取有些模块的成员,就只能使用 dir() 函数。

分类:

技术点:

相关文章: