我想创建计算函数调用的装饰器。
我很接近,但问题是输出是每个函数的单独字典,我希望每个函数都存储在一个字典中。
如何制作可以存储此类数据的全局字典,我尝试添加另一个创建字典的装饰器但它没有帮助,非局部变量也没有帮助?
def count(func):
def inner():
inner.calls += 1
if inner.calls > 1:
count_update = inner.dict[func.__name__] + 1
update = {func.__name__:count_update}
inner.dict.update(update)
else:
inner.dict={func.__name__:1}
func()
print(f'Current state {inner.dict}')
inner.calls = 0
inner.dict={}
return inner
@count
def show_date():
current_time = datetime.now()
current_time_formatted = current_time.strftime("%Y-%d-%B-%A")
print(current_time_formatted)
return current_time_formatted
@count
def print_random_number2():
numb = random.randint(0,10000)
string_final=f'Number is {numb}'
print(string_final)
return string_final
show_date()
show_date()
show_date()
print_random_number2()
print_random_number2()
show_date()
您可以通过在全局范围内(即函数外部)创建字典来声明全局字典:
func_counts = {}
def count(func):
def inner():
func_counts[func.__name__] = func_counts.get(func.__name__, 0) + 1
func()
print(f'Current state {func_counts}')
return inner
没有必要用
global
或 nonlocal
声明它,因为你没有在函数内部重新绑定它。