python 学习笔记 ---返回值为函数 闭包



                5:返回函数 (函数作为返回值)
                    高阶函数不仅仅可以接受函数作为参数 ,还可以把函数作为结果值返回 
                        >>>def lazy_sum(*args)
                                    def sum():
                                        ax=0
                                        for n in args:
                                            ax=ax+n
                                        return ax
                                    return sum
                        >>>f =lazy_sum(1,3,5,7,9)
                        >>>f
                        <function sum at 0x238dada>
                        >>>f()
                        25


                    函数lazy_sum中又定义了sum并且内部函数sum 有引用了lazy_sum 的参数和局部变量 当lazy_sum 返回函数sum时 相关参数和变量都保存在返回的函数中 这种程序称为  “闭包”
                    闭包:当一个函数返回一个函数后,其局部变量还被新的函数引用。 需要注意的是 返回的函数没有立即执行 而是直到调用了f()之后才开始执行
                        >>>def count():
                                    fs=[]
                                    for i in range(1,4):
                                        def f():
                                            return i*i
                                        fs.append(f)
                                    return fs
                        >>>f1,f2,f3=count()
                        >>>f1()
                        9
                        >>>f2()
                        9
                        >>>f3()
                        9


                    多返回值  返回了一个list 然后将这个list 中的三个函数分别给了f1 f2 f3 因为调用的时候才开始执行。 所以执行的时候i 都已经是3了  所以结果都为9
                        >>>def count():
                                    fs=[]
                                    for i in range(1,4):
                                        def f(j):
                                            def g():
                                                return j*j
                                            return g
                                        fs.append(f(i))
                                    return fs
                        >>>f1,f2,f3=count()
                        >>>f1()
                        1
                        >>>f2()
                        4
                        >>>f3()
                        9


                    返回的时候j的值已经确定了  所以 得到的值不是全部为9             
                     总结: 在使用函数做为返回值的时候  需要注意的是  返回的函数并没有立即执行  而是主动调用之后才开始执行。当然其相应的变量等等 都已经保存了下来
            
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值