更新时间:2022-09-01 来源:黑马程序员 浏览量:
我们都知道,Python函数是支持嵌套的。如果在一个内部函数中对外部函数作用域(非全局作用域)的变量进行引用,那么内部函数就会被称为闭包。闭包需要满足如下三个条件:
(1)存在于嵌套关系的函数中。
(2)嵌套的内部函数引用了外部函数的变量。
(3)嵌套的外部函数会将内部函数名作为返回值返回。
为了让读者更好地认识闭包,接下来,通过一个案例进行讲解,如例7-1所示。
例7-1 闭包.py
# 外部函数 def outer(start=0): count = [start] # 函数内的变量 # 内部函数 def inner(): count[0] += 1 # 引用外部函数的变量 return count[0] # 返回内部函数的名称 return inner quote = outer(5) print(quote())
在例7-1中,第2~9行代码定义了一个嵌套函数。其中,outer函数是外部函数,,inner是内部函数。
在outer函数中,首先定义了一个表示列表的变量count(该列表只有一个元素),然后定义了一个inner函数,最后将inner函数的名称返回。
在inner函数中,引用了外部函数定义的列表count,并对count的元素进行修改,修改后的列表元素使用return返回。
第10行代码调用了外部函数outer,并将其返回的结果inner赋值给变量quote,这表明quote与inner一样,引用的都是inner函数占用的内存空间。
第11行代码调用了quote函数,实际上就是调用inner函数。
程序的运行结果如图7-1所示。
图7-1 运行结果