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统计函数被调用次数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一文教你用python编写Dijkstra算法进行机器人路径规划

    一文教你用python编写Dijkstra算法进行机器人路径规划

    迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径,这篇文章主要给大家介绍了关于利用python编写Dijkstra算法进行机器人路径规划的相关资料,需要的朋友可以参考下
    2021-08-08
  • 利用信号如何监控Django模型对象字段值的变化详解

    利用信号如何监控Django模型对象字段值的变化详解

    这篇文章主要给大家介绍了关于利用信号如何监控Django模型对象字段值变化的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2017-11-11
  • Python写一个简单的在线编辑器

    Python写一个简单的在线编辑器

    这篇文章主要介绍了如何利用Python写一个简单的在线编辑器,主要通过pywebio程序,实现了Python的简陋在线编辑器,需要的小伙伴可以参考一下,希望对你有所帮助
    2022-02-02
  • Pandas多个条件(AND,OR,NOT)中提取行

    Pandas多个条件(AND,OR,NOT)中提取行

    本文主要介绍了Pandas多个条件(AND,OR,NOT)中提取行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 机器学习之KNN算法原理及Python实现方法详解

    机器学习之KNN算法原理及Python实现方法详解

    这篇文章主要介绍了机器学习之KNN算法原理及Python实现方法,结合实例形式详细分析了机器学习KNN算法原理以及Python相关实现步骤、操作技巧与注意事项,需要的朋友可以参考下
    2018-07-07
  • django实现登录时候输入密码错误5次锁定用户十分钟

    django实现登录时候输入密码错误5次锁定用户十分钟

    这篇文章主要介绍了django实现登录时候输入密码错误5次锁定用户十分钟,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • python 搜索大文件的实例代码

    python 搜索大文件的实例代码

    今天小编就为大家分享一篇python 搜索大文件的实例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • python中使用正则表达式的后向搜索肯定模式(推荐)

    python中使用正则表达式的后向搜索肯定模式(推荐)

    这篇文章主要介绍了python里使用正则表达式的后向搜索肯定模式,本文通过代码介绍的非常详细,包括语法介绍,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-11-11
  • Python写了个疫情信息快速查看工具实例代码

    Python写了个疫情信息快速查看工具实例代码

    本次使用PyQt5开发了一款疫情信息快速查看工具,实现了多个数据源的查看,代码量不大,功能相当于浏览器,只是限定了一些特定网址,这篇文章主要介绍了Python写了个疫情信息快速查看工具,需要的朋友可以参考下
    2022-11-11
  • Python操作mongodb数据库进行模糊查询操作示例

    Python操作mongodb数据库进行模糊查询操作示例

    这篇文章主要介绍了Python操作mongodb数据库进行模糊查询操作,结合实例形式分析了Python连接MongoDB数据库及使用正则表达式进行模糊查询的相关操作技巧,需要的朋友可以参考下
    2018-06-06

最新评论