Python Inspect Module小結

python的inspect模塊正如他們的命名一樣,是用于檢查運行模塊的一些基本信息,有了inspect模塊,我們可以做很多有意思的事情,下面主要想探究一下inspect模塊

inspect.getmembers


def getmembers(object, predicate=None):
"""Return all members of an object as (name, value) pairs sorted by name.
Optionally, only return members that satisfy a given predicate."""
results = []
# 使用dir(builtin)獲取所有的attr-key
for key in dir(object):
    try:
        value = getattr(object, key)
    except AttributeError:
        continue
    # 如果有預測函數則進行預測
    if not predicate or predicate(value):
        results.append((key, value))
results.sort()
return results

getmembers方法的實現非常簡單,其內部的實現就是用內建函數dir實現的。

inspect.currentframe


currentframe內部實現是通過sys._getframe實現的。在使用currentframe的時候要注意防止循環引用。

def handle_stackframe_without_leak():
    frame = inspect.currentframe()
try:
    # do something with the frame
finally:
    del frame

inspect的使用


1. 獲取調用函數的實例

# file: util.py
def get_caller():
    import inspect
    try:
        frame = inspect.currentframe()
        call_frame = frame.f_back.f_back
        call_frame_name = call_frame.f_code.co_varnames[0]
        call_frame_self = call_frame.f_locals.get(call_frame_name, None)
    except:
        call_frame_self = None
    finally:
        del frame
    return call_frame_self
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • pypy支持的擴展模塊(對應Python/Modules/中的模塊) pypy支持的內建模塊:__builtin_...
    JianMing閱讀 4,825評論 0 0
  • 個人筆記,方便自己查閱使用 Py.LangSpec.Contents Refs Built-in Closure ...
    freenik閱讀 67,743評論 0 5
  • http://python.jobbole.com/85231/ 關于專業技能寫完項目接著寫寫一名3年工作經驗的J...
    燕京博士閱讀 7,606評論 1 118
  • 兩本不錯的書: 《Python參考手冊》:對Python各個標準模塊,特性介紹的比較詳細。 《Python核心編程...
    靜熙老師哈哈哈閱讀 3,385評論 0 80
  • 給自己: 首先抱抱自己。 最近幾天你免不了的焦慮、發脾氣、自責和糾結,其實暴露了你急于想改變的心態。這些都是正常的...
    日出東方天剛曉閱讀 251評論 0 1