This question already has answers here:
Global dictionaries don't need keyword global to modify them? [duplicate]

(2 个回答)


3年前关闭。




在下面的代码中,
def makeAverage():
    series = []
    def average(newValue):
        series.append(newValue)
        total = sum(series)
        return total/len(series)
    return average

python 解释器不希望 seriesnonlocal 中的 average()

但是在下面的代码中
def makeAverage():
    count = 0
    total = 0
    def average(newValue):
        nonlocal count, total
        count += 1
        total += newValue
        return total/count
    return average

问题:

为什么python解释器需要在count中声明totalnonlocal

最佳答案

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

关于python - 非本地关键字如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45135981/

10-12 21:18