簡體   English   中英

動態定義一個虛擬裝飾器

[英]Dynamically Defining a Dummy Decorator

我正在使用一個名為https://github.com/rkern/line_profiler的好工具

要使用它,您需要在腳本中的多個位置放置一個裝飾器@profile以指示應分析哪些函數。 然后你通過kernprof -l script_to_profile.py執行腳本

顯然,當通過python script_to_profile.py自行運行腳本時,裝飾器未定義,因此腳本崩潰。

我知道如何定義標識裝飾器,我可以從命令行傳遞一個標志,並根據標志的設置方式在主腳本中定義它。 但是,我不知道如何將裝飾器定義(或標志)傳遞給我加載的模塊,以便它們在加載時不會崩潰。 有任何想法嗎?

def profile(func):
        return func

一個非常簡單的方法是檢查命名profile存在,如果不存在,則將其定義為您的身份裝飾器。 像這樣的東西。

try:
    profile
except NameError:
    def profile(func):
        return func

你可以更進一步,確保它是可調用的——可能沒有必要:

import typing

try:
    profile
except NameError:
    profile = None

if not isinstance(profile, typing.Callable):
    def profile(func):
        return func

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM