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

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

猜你喜欢

转载自blog.csdn.net/luotuofeile/article/details/84314159
今日推荐