我对教程问题有疑问。
编写一个函数make_monitored
,它将一个函数f
作为输入,它本身接受一个输入。 make_monitored返回的结果是第三个函数,比如mf,它通过维护内部计数器来跟踪它被调用的次数。如果mf的输入是特殊字符串"how-many-calls?"
,则mf返回计数器的值。如果输入是特殊字符串"reset-count"
,则mf将计数器重置为零。对于任何其他输入,mf返回在该输入上调用f的结果并递增计数器。
令人惊讶的是,我有以下解决方案。
def make_monitored(f):
calls=[0]
def helper(n):
if n=="how-many-calls?":
return calls[0]
elif n=="reset-count":
calls[0]=0
else:
calls[0]+=1
return f(n)
return helper
我在这里回忆起关于UnboundLocalError的内容:UnboundLocalError in Python
我的问题是为什么calls[0]+=1
不会触发该错误?我对第三个函数helper
的局部范围之外的变量进行了赋值,它似乎是一个使用calls.append(1)
的类似解决方案(其余代码相应地变为len(calls)
和{ {1}})也绕过了那个错误。