因为:createCounter1是个闭包函数。
def createCounter1(): li = [0] def counter(): li[0] += 1 return li[0] return counter
1、li = [0] 定义了一个列表(li[0] == 0),这个列表是个容器,在counter函数里执行li[0] += 1,则函数外的li[0] 也会增加 1;
2、函数引用了li列表: 这个li是“局部作用域以外且非全局作用域当中的变量”----自由变量。(https://docs.python.org/zh-cn/3.7/reference/simple_stmts.html#nonlocal)
3、闭包函数在return li[0]后,会保留着li的值,供下次使用。
4、要学会闭包函数,理解“自由变量”是关键。
Sign in to make a reply
ywjco_567
因为:createCounter1是个闭包函数。
1、li = [0] 定义了一个列表(li[0] == 0),这个列表是个容器,在counter函数里执行li[0] += 1,则函数外的li[0] 也会增加 1;
2、函数引用了li列表: 这个li是“局部作用域以外且非全局作用域当中的变量”----自由变量。(https://docs.python.org/zh-cn/3.7/reference/simple_stmts.html#nonlocal)
3、闭包函数在return li[0]后,会保留着li的值,供下次使用。
4、要学会闭包函数,理解“自由变量”是关键。