码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-12-14 10:13:27      阅读:67      评论:0      收藏:0      [点我收藏+]

标签:bsp   return   定义   header   range   函数   def   如何使用   完成   

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

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

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

标签:bsp   return   定义   header   range   函数   def   如何使用   完成   

原文地址:https://www.cnblogs.com/lijianming180/p/12037927.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!