闭包函数如何使用循环变量

萝らか妹 提交于 2019-12-14 01:43:16

一般情况下,闭包的函数体内是避免使用循环变量的,因为调用主体函数时, 循环变量一般是执行结束后,返回一个执行后的值。

def count():
fs = []
for i in range(1, 4):
    def f():
         return i*i
    fs.append(f)
return fs

f1, f2, f3 = count()
print(f1(),f2(),f3())
  • 预期返回的结果是1,4,9,但实际返回的结果是9,9,9
  • 原因就是当count()函数返回了3个函数时,这3个函数所引用的变量 i 的值已经变成了3

大专栏  闭包函数如何使用循环变量" title="解决方案一">解决方案一

  • 方法:问题的产生是因为函数只在执行时才去获取外层参数i,若函数定义时可以获取到i,问题便可解决。而默认参数正好可以完成定义时获取i值且运行函数时无需参数输入的功能,所以在函数f()定义中改为f(m = i),函数f返回值改为m*m即可。
  • 代码修改:

    def count():
    fs = []
    for i in range(1, 4):

    def f(m = i):
        return m * m
    fs.append(f)
    

    return fs

    f1,f2,f3 = count()
    print(f1(),f2(),f3())
    1,4,9

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!