每当您在函数内部分配变量时,它将是该函数的局部变量。该行为
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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)