为什么此闭包不修改封闭范围内的变量?

为什么此闭包不修改封闭范围内的变量?,第1张

为什么此闭包不修改封闭范围内变量

每当您在函数内部分配变量时,它将是该函数的局部变量。该行为

start +=1
分配了一个新值
start
start
本地变量也是如此。由于
start
存在局部变量
start
,因此当您初次尝试访问它时,该函数将不会尝试在全局范围内查找,因此会出现错误。

在3.x中,如果使用

nonlocal
关键字,您的代码示例将起作用:

def make_incrementer(start):    def closure():        nonlocal start        while True: yield start start += 1    return closure

在2.x上,您通常可以通过使用

global
关键字来解决类似问题,但这在这里不起作用,因为
start
它不是全局变量。

在这种情况下,您可以执行建议的 *** 作(

x = start
),也可以使用可变变量来修改并产生内部值。

def make_incrementer(start):    start = [start]    def closure():        while True: yield start[0] start[0] += 1    return closure


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5655245.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存