python中对闭包的理解(1)

今天聊下python中闭包的用法,首先它是在函数内再定义一个函数,内部定义的函数可以引用外部函数的参数和局部变量,在调用外部函数时返回的是内部函数,但是不会立马执行内部函数的程序体,需要单独调用内部函数才会去执行。下面的程序就是闭包

首先正常定义一个求和函数:

def sum(*args):
    s = 0
    for i in args:
        s += i
    return s
print(sum(1,2,3,4,5,6))

执行结果:

21

在调用sum()函数时就会返回计算结果。

现在把这个函数定义在另一个函数的内部:

def lazy_sum(*args):
    def sum():
        s = 0
        for i in args:
            s += i
        return s
    return sum

内部函数引用了外部函数的参数args,外部函数最后返回的是内部函数sum,在调用lazy_sum()函数时,我们看下返回的是什么

f1 = lazy_sum(1,0,9,8,7,6,5)
print(f1)

执行结果:

<function lazy_sum.<locals>.sum at 0x000000A05E2F01E0>

可以看到外部函数最后返回的是一个函数,参数和变量保存在该函数中,此时并没有执行函数体,需要在调用f1才会执行函数,因为每次返回都是返回一个函数保存算法和相关数据,所以每次调用lazy_sum()返回的函数是不同的,即使填入的参数一样。调用函数f1的结果。

print(f1())

执行结果:

36

闭包的简单概念就介绍到这,下次再继续探讨

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值