Python全系列 教程
3567个小节阅读:5929.1k
目录
鸿蒙应用开发
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
根据字面意思,可以形象地把闭包理解为一个封闭的包裹,这个包裹就是一个函数。当然,还有函数内部对应的逻辑,包裹里面的东西就是自由变量(外部函数的局部变量),自由变量可以随着包裹到处游荡。
- 局部变量:如果名称绑定再一个代码块中,则为该代码块的局部变量,除非声明为nonlocal或global
- 全局变量:如果模块绑定在模块层级,则为全局变量
- 自由变量:如果变量在一个代码块中被使用但不是在其中定义,则为自由变量
我们知道,函数作用域是独立的、封闭的,外部的执行环境是访问不了的,但是闭包具有这个能力和权限。
闭包是一个函数,只不过这个函数有[超能力],可以访问到另一个函数的作用域。
「函数」和「自由变量」的总和,就是一个闭包。
闭包的特点:
第一,闭包是一个函数,而且存在于另一个函数当中
第二,闭包可以访问到父级函数的变量,且该变量不会销毁
【示例】一个简单的闭包
xxxxxxxxxx
#coding=utf-8
"""
闭包的特点:
1. 存在内外层函数嵌套的情况
2. 内层函数引用了外层函数的变量或者参数(自由变量)
3. 外层函数把内层的这个函数本身当作返回值进行返回,而不是返回内层函数产生的某个值
"""
def outer():
a = 1
def inner():
nonlocal a
#闭包是由于函数内部使用了函数外部的变量。这个函数对象不销毁,则外部函数的局部变量也不会被销毁!
print("a:",a)
a += 1
return inner
inn = outer()
inn()
inn()
"""
a: 1
a: 2
a: 3
a: 4
"""
实时效果反馈
1. 如下关于闭包的说法,错误的是:
A 闭包是一个函数,而且存在于另一个函数当中
B 闭包可以访问到父级函数的变量,且该变量不会销毁
C 函数和自由变量的总和,就是一个闭包。
D 闭包中的自由变量和全局变量,完全一模一样
答案
1=>D