def counter(fn):
count = 0
def inner(*arg, **kwarg):
nonlocal count
count += 1
print("Function {0} called {1} times".format(fn.__name__, count))
return fn(*arg, **kwarg)
return inner
@counter
def add(a, b=0):
return a + b
#add = counter(add) # add = inner(add)
#add(1,2)
#add(2,3)
print(add(1,2)) #ass(1, 2) = inner(1, 2) #1, 2->*arg
print(counter(add)(1,2))