为什么列表不会出现UnboundLocalError?

时间:2018-04-07 15:37:58

标签: python-3.x list

我对教程问题有疑问。

编写一个函数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}})也绕过了那个错误。

0 个答案:

没有答案