python - 非本地关键字如何工作?

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

<分区>

在下面的代码中,

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

最佳答案

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

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

相关文章:

python - 怎么解释这个 “lambda in filter changes the result when calculating primes"

python - 为什么 "for line in file:"只能使用一次?

python - 如何解析列表的列表并将元素一起分析以查看它们随时间出现了多少次?

python-3.x - 使用 Python 和 PyDrive 在 Google Drive 上成功上传文件,但文件已损坏

python - 尝试对 .append 使用多个参数,无论如何?

python - os.path.join 不存在的假路径总是可以吗?

swift - 接受参数但不返回值的自动关闭

objective-c - Objective-c 中的 Smalltalk block ?

Scala 单元到匿名类

python - Pandas SQL 等价于 update where group by