Python檢視模組(變數、函式、類)方法

renke發表於2021-09-11

Python檢視模組(變數、函式、類)方法

在匯入模組之後,開發者往往需要了解模組包含哪些功能,比如包含哪些變數、哪些函式、哪些類等,還希望能檢視模組中各成員的幫助資訊,掌握這些資訊才能正常地使用該模組。

為了檢視模組包含什麼,可以透過如下兩種方式:

使用 dir() 函式。

使用模組本身提供的 __all__ 變數。

前面章節已經介紹過 dir() 函式的基本用法,該函式可用於返回模組或類所包含的全部程式單元(包括變數、函式、類和方法等),但直接使用 dir() 函式預設會列出模組內所有的程式單元,包括以下畫線開頭的程式單元,而這些以下畫線開頭的程式單元其實並不希望被外界使用。

比如在 Python 的互動式直譯器中執行如下命令來匯入 string 模組(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__ 變數列出的結果,不難發現二者的輸出結果大致相同,這說明使用這兩種方式都可以檢視到模組所包含的程式單元。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/430/viewspace-2837302/,如需轉載,請註明出處,否則將追究法律責任。

相關文章