您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

计算另一个方法中的python方法调用

计算另一个方法中的python方法调用

听起来几乎像是装饰工的教科书示例!

def counted(fn):
    def wrapper(*args, **kwargs):
        wrapper.called += 1
        return fn(*args, **kwargs)
    wrapper.called = 0
    wrapper.__name__ = fn.__name__
    return wrapper

@counted
def foo():
    return

>>> foo()
>>> foo.called
1

您甚至可以使用另一个装饰器来自动记录一个函数在另一个函数中被调用多少次:

def counting(other):
    def decorator(fn):
        def wrapper(*args, **kwargs):
            other.called = 0
            try:
                return fn(*args, **kwargs)
            finally:
                print '%s was called %i times' % (other.__name__, other.called)
        wrapper.__name__ = fn.__name__
        return wrapper
    return decorator

@counting(foo)
def bar():
    foo()
    foo()

>>> bar()
foo was called 2 times

但是,如果最终foo还是bar可以自称,那么您将需要一个涉及堆栈的更复杂的解决方案来应对递归。然后,您将走向全面的探查器…

如果您仍在“自学Python”,可能是这种包装好的装饰器材料(通常用于魔术)不是理想的选择!

python 2022/1/1 18:33:20 有211人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶