更新时间: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 运行结果
【AI设计】北京143期毕业仅36天,全员拿下高薪offer!黑马AI设计连续6期100%高薪就业
2025-09-19【跨境电商运营】深圳跨境电商运营毕业22个工作日,就业率91%+,最高薪资达13500元
2025-09-19【AI运维】郑州运维1期就业班,毕业14个工作日,班级93%同学已拿到Offer, 一线均薪资 1W+
2025-09-19【AI鸿蒙开发】上海校区AI鸿蒙开发4期5期,距离毕业21天,就业率91%,平均薪资14046元
2025-09-19【AI大模型开发-Python】毕业33个工作日,就业率已达到94.55%,班均薪资20763元
2025-09-19【AI智能应用开发-Java】毕业5个工作日就业率98.18%,最高薪资 17.5k*13薪,全班平均薪资9244元
2025-09-19