今天聊下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
闭包的简单概念就介绍到这,下次再继续探讨