【问题标题】:How nonlocal keyword works? [duplicate]非本地关键字如何工作? [复制]
【发布时间】:2017-12-21 12:05:11
【问题描述】:

在下面的代码中,

def makeAverage():
    series = []
    def average(newValue):
        series.append(newValue)
        total = sum(series)
        return total/len(series)
    return average

python 解释器不期望 seriesaverage() 中是 nonlocal

但是在下面的代码中

def makeAverage():
    count = 0
    total = 0
    def average(newValue):
        nonlocal count, total
        count += 1
        total += newValue
        return total/count
    return average

问题:

为什么python解释器期望counttotalaverage()中声明nonlocal

【问题讨论】:

标签: python python-3.x closures python-nonlocal


【解决方案1】:

如果您在函数中的任何位置分配 变量,并且您没有另外标记它(使用globalnonlocal),则该变量被视为函数的本地变量。在您的第一个示例中,average 内部没有分配给series,因此它不被视为average 的本地,因此使用封闭函数的版本。在第二个例子中,totalcountaverage 内部有赋值,因此需要将它们标记为nonlocal 才能从封闭函数中访问它们。 (否则你会得到一个 UnboundLocalError ,因为average 在第一次分配给它们之前会尝试读取它们的值。)

【讨论】:

    猜你喜欢
    • 2018-02-05
    • 1970-01-01
    • 2019-05-31
    • 2019-09-03
    • 2011-03-11
    • 1970-01-01
    • 2020-07-17
    相关资源
    最近更新 更多