开发者

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

开发者 https://www.devze.com 2023-02-10 09:29 出处:网络 作者: 整天梦游的小jerry
目录一、前言二、正文第一种方法:第二种方法:第3.1种方法(超简单)第3.2种方法(超简单)第3.3种方法(超简单)三、小结一、前言
目录
  • 一、前言
  • 二、正文
    • 第一种方法:
    • 第二种方法:
    • 第3.1种方法(超简单)
    • 第3.2种方法(超简单)
    • 第3.3种方法(超简单)
  • 三、小结

    一、前言

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

    二、正文

    第一种方法:

    当然有,那就是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函数。这时候就www.devze.com要看第二种方法

    第二种方法:

    def call_counterjs(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
      ca编程客栈lls += 1
      # do your func stuff here
     
    ## 如果想统计class中的函数使用次数,同理

    第3.2种方法(超简单)

    class Test(objecpythont):
        def __init__(self):
            self.calls = 0
        def f(self):
            self.calls += 1
            # do your func stuff here
    

    第3.3种方法(超简单)

    cl开发者_JAVA入门ass 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统计函数被调用次数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号