def counter(fn):
count = 0
def inner(*args, **kwargs):
nonlocal count
count += 1
print(f'function fn address at', fn)
print('Function {0} was called {1} times'.format(fn.__name__, count))
return fn(*args, **kwargs)
return inner
def add(a, b=0):
return a + b
def diff(a,b=0):
return a - b
print(f'function add address at',add)
add = counter(add)
print(f'function add address after counter at',add) # address of inner
diff = counter(diff)
result = add(1,2) # Function add was called 1 times
add(2,3)
add(3,4)
diff(2,3)
diff(6,7)
print(result)
print(dir(add))