python統(tǒng)計函數(shù)被調用次數(shù)的實現(xiàn)
一、前言
每當做搜索任務或者時間復雜度任務相關時候,就會有統(tǒng)計函數(shù)被調用次數(shù)的需求。通常我們的做法是在函數(shù)前面定義一個變量,每循環(huán)調用一次,變量就加一,這不失為一種辦法,那么有沒有更高效的方法呢?
二、正文
第一種方法:
當然有,那就是python的獨家專屬操作—> 裝飾器。
廢話不多說,直接上例子:
class CallingCounter(object): ? ? def __init__ (self, func): ? ? ? ? self.func = func ? ? ? ? self.count = 0 ? ? def __call__ (self, *args, **kwargs): ? ? ? ? self.count += 1 ? ? ? ? return self.func(*args, **kwargs) @CallingCounter def test(): ? ? print('我被調用了') test() print(f'我被調用了{test.count}次')
如果是統(tǒng)計class中的函數(shù)被調用的次數(shù),就把 裝飾器 裝在被調用函數(shù)的前面即可。
class CallingCounter(object): ? ? def __init__ (self, func): ? ? ? ? self.func = func ? ? ? ? self.count = 0 ? ? def __call__ (self, *args, **kwargs): ? ? ? ? self.count += 1 ? ? ? ? return self.func(*args, **kwargs) class Test: ? ? @CallingCounter ? ? def test(): ? ? ? ? print('我被調用了') for i in range(10): ? ? Test.test() print(f'我被調用了{Test.test.count}次')
如果你的class中有很多的self用來調用函數(shù),那么可能會報錯,提示self無xxx屬性or函數(shù)。這時候就要看第二種方法
第二種方法:
def call_counter(func): ? ? def helper(*args, **kwargs): ? ? ? ? helper.calls += 1 ? ? ? ? return func(*args, **kwargs) ? ? helper.calls = 0 ? ? helper.__name__= func.__name__ ? ? return helper ? ?? # 下面是使用裝飾器 @call_counter def f(): ? ? pass print(f.calls) for _ in range(10): ? ? f() print(f.calls) # 0 10 # 這里是另一種調用方式 def f(): ? ? pass f = call_counter(f) print(f.calls) for _ in range(10): ? ? f() print(f.calls) # 0 10
上面兩種方法筆者都親自做了測試,下面再介紹3個超簡單的(狗頭保命)
第3.1種方法(超簡單)
calls = 0 def f(): ? ? global calls? ? ? calls ?+= 1 ? ? # do your func stuff here ? ?? ## 如果想統(tǒng)計class中的函數(shù)使用次數(shù),同理
第3.2種方法(超簡單)
class Test(object): def __init__(self): self.calls = 0 def f(self): self.calls += 1 # do your func stuff here
第3.3種方法(超簡單)
class Test(object): ? ? calls = 0 ? ? def __init__(self): ? ? ? ? pass ? ? def f(self): ? ? ? ? Test.calls += 1 ? ? ? ? # do your func stuff here # 調用方式 # Test().f() A = Test() for i in range(10): ? ? A.f() print(A.calls) print(Test().calls) print(Test.calls)
三、小結
到此這篇關于python如何統(tǒng)計函數(shù)被調用次數(shù)的文章就介紹到這了,更多相關python統(tǒng)計函數(shù)被調用次數(shù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- Python如何統(tǒng)計函數(shù)調用的耗時
- 利用Python實現(xiàn)簡單的Excel統(tǒng)計函數(shù)
- python?DataFrame數(shù)據(jù)分組統(tǒng)計groupby()函數(shù)的使用
- python統(tǒng)計函數(shù)庫scipy.stats的用法解析
- Python實現(xiàn)Mysql數(shù)據(jù)統(tǒng)計及numpy統(tǒng)計函數(shù)
- Python使用統(tǒng)計函數(shù)繪制簡單圖形實例代碼
- Python中統(tǒng)計函數(shù)運行耗時的方法
- python常見統(tǒng)計分析處理函數(shù)解讀
相關文章
一文教你用python編寫Dijkstra算法進行機器人路徑規(guī)劃
迪杰斯特拉(Dijkstra)算法是典型最短路徑算法,用于計算一個節(jié)點到其他節(jié)點的最短路徑,這篇文章主要給大家介紹了關于利用python編寫Dijkstra算法進行機器人路徑規(guī)劃的相關資料,需要的朋友可以參考下2021-08-08利用信號如何監(jiān)控Django模型對象字段值的變化詳解
這篇文章主要給大家介紹了關于利用信號如何監(jiān)控Django模型對象字段值變化的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。2017-11-11機器學習之KNN算法原理及Python實現(xiàn)方法詳解
這篇文章主要介紹了機器學習之KNN算法原理及Python實現(xiàn)方法,結合實例形式詳細分析了機器學習KNN算法原理以及Python相關實現(xiàn)步驟、操作技巧與注意事項,需要的朋友可以參考下2018-07-07django實現(xiàn)登錄時候輸入密碼錯誤5次鎖定用戶十分鐘
這篇文章主要介紹了django實現(xiàn)登錄時候輸入密碼錯誤5次鎖定用戶十分鐘,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11Python操作mongodb數(shù)據(jù)庫進行模糊查詢操作示例
這篇文章主要介紹了Python操作mongodb數(shù)據(jù)庫進行模糊查詢操作,結合實例形式分析了Python連接MongoDB數(shù)據(jù)庫及使用正則表達式進行模糊查詢的相關操作技巧,需要的朋友可以參考下2018-06-06