python统计函数被调用次数的实现

 更新时间:2023年02月10日 08:26:30   作者:整天梦游的小jerry  
本文主要介绍了python如何统计函数被调用次数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、前言

每当做搜索任务或者时间复杂度任务相关时候,就会有统计函数被调用次数的需求。通常我们的做法是在函数前面定义一个变量,每循环调用一次,变量就加一,这不失为一种办法,那么有没有更高效的方法呢?

二、正文

第一种方法:

当然有,那就是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}次')

如果是统计class中的函数被调用的次数,就把 装饰器 装在被调用函数的前面即可。

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用来调用函数,那么可能会报错,提示self无xxx属性or函数。这时候就要看第二种方法

第二种方法:

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
    
## 如果想统计class中的函数使用次数,同理

第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如何统计函数被调用次数的文章就介绍到这了,更多相关python统计函数被调用次数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Django+Xadmin构建项目的方法步骤

    Django+Xadmin构建项目的方法步骤

    这篇文章主要介绍了Django+Xadmin构建项目的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • Python logging日志库空间不足问题解决

    Python logging日志库空间不足问题解决

    这篇文章主要介绍了Python logging日志库空间不足问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Python爬虫爬取ts碎片视频+验证码登录功能

    Python爬虫爬取ts碎片视频+验证码登录功能

    这篇文章主要介绍了Python爬虫爬取ts碎片视频+验证码登录功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • 使用Python请求http/https时如何设置失败重试次数

    使用Python请求http/https时如何设置失败重试次数

    这篇文章主要介绍了使用Python请求http/https时如何设置失败重试次数问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Python Pandas 删除列操作

    Python Pandas 删除列操作

    这篇文章主要介绍了Python Pandas 删除列操作,主要操作使用del和drop方法删除DataFrame中的列,使用drop方法一次删除多列,需要的朋友可以参考一下
    2022-03-03
  • python中time、datetime模块的使用

    python中time、datetime模块的使用

    这篇文章主要介绍了python中time、datetime模块的使用,帮助大家更好的利用python处理时间,感兴趣的朋友可以了解下
    2020-12-12
  • 10张动图学会python循环与递归问题

    10张动图学会python循环与递归问题

    今天为大家整理了十张动图GIFS,有助于认识循环、递归、二分检索等概念的具体运行情况。代码实例以Python语言编写,非常不错,感兴趣的朋友跟随小编一起学习吧
    2021-02-02
  • PyQt5+QtChart实现绘制区域图

    PyQt5+QtChart实现绘制区域图

    QChart是一个QGraphicScene中可以显示的QGraphicsWidget。本文将利用QtChart实现区域图的绘制,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-12-12
  • Python try except异常捕获机制原理解析

    Python try except异常捕获机制原理解析

    这篇文章主要介绍了Python try except异常捕获机制原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • python实现简单http服务器功能

    python实现简单http服务器功能

    这篇文章主要为大家详细介绍了python实现简单http服务器功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09

最新评论