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