在Python中,您可以定义一个函数属性"call_count";这样:
def counter(func):
def inner(*args):
inner.call_count+= 1
return func(*args)
inner.call_count= 0
return inner
def sum(a, b, c):
return a+b+c
sumCounter= counter(sum)
print(sumCounter(1,2,3))
print(sumCounter.call_count)
print(sumCounter(3,2,2))
print(sumCounter.call_count)
此打印:
6
1
7
2
如果我不想调用sumCounter.call_count,而是想调用一个函数属性sumCounter.caall_count((呢?也就是说;外观;像类方法?这是怎么做到的?
您可以有一个名为call_count
的变量或一个名称为call_count
的函数,但不能两者都有。在任何一种情况下,您都需要一些变量。
def counter(func):
def inner(*args):
inner._call_count+= 1
return func(*args)
inner._call_count= 0
inner.call_count = lambda: _call_count
return inner
函数是第一类对象。它们就像任何类的实例一样工作(因为它们是一个类的实例(。您可以为它们指定任何属性,包括其他函数。
def counter(func):
def inner(*args):
inner._call_count+= 1
return func(*args)
inner._call_count= 0
def call_count():
return inner._call_count
inner.call_count = call_count
return inner