Python闭包函数的使用和原理
2023-04-18 12:33:03 时间
嵌套函数中,内部函数引用外部函数的参数和变量所获得的结果,被外层函数当做返回值给返回的情况称为闭包函数。
下面先来看看一段代码,然后再详细解释闭包函数的原理。
def func(m):
n = 5
def func1(x):
print(m + n + x) # 使用外部函数的变量和参数来运算
return func1 # 返回内部函数
test = func(3) # func(3)的返回值就是func1,所以test=func1()
test(10) # 这时候相当于调用函数func1并且传参
返回结果:
<function func.<locals>.func1 at 0x00000000023A13A0>
18
上面的外层函数func接收一个参数m,内部定义一个变量n和一个函数func1,在func1中需要接收一个参数x。当我们执行func(3)的时候返回一个func1函数,当我们再调用test这个变量的时候,其实就是调用外层函数返回的内部函数func1,所以也能传参,这时候就有了结果。
下面我们把之前的学生上网案例拿出来,使用闭包函数来选择内部函数返回不同功能作用的结果,类似于返回函数,但是本质有区别,返回函数是对返回的函数种类进行筛选,闭包函数是对内部函数处理的不同结果进行返回。
age = input('请输入你的年龄:')
aa = '学生'
bb = '成年人'
def func(aa, bb):
# 定义其他内部函数
def func1(n):
if n >= 18:
print('你是大%s,属于%s,可以上网了' % (aa, bb))
else:
print('你是小%s,属于未%s,不可以上网了' % (aa, bb))
return func1
test = func(aa, bb) # 先把参数传递进去给内部函数使用
test(int(age)) # 对内部函数返回的结果进行筛选
这里要注意闭包函数内部函数如果定义和外部函数同名变量时的作用域问题。
def test1():
m = 100
def test2():
nonlocal m # 如果想改变外部变量值一定要用nonlocal,否则被视为重新定义的局部变量
m = 101
print(m)
print(m)
test2()
print(m) # 这里的m变成101了
return test2
注意:闭包函数内的代码执行顺序
def test3():
m = 100
def test4():
print(m) # 这里没有m3的变量
m = 200
print(m) # 返回结果为200
return test4
test = test3() # test() # 这里注释以后不报错,说明没有执行内部函数,也就是m被重新赋值后,调用函数以后
相关文章
- Python使用tkinter组件Label显示简单数学公式
- 内网渗透之DCOM横向移动
- 以目标为导向的语义交流的共同语言——一个课程学习框架
- python爬虫前奏【成信笔记】
- HTML 5 File API:文件拖放上传功能
- 教你快速创建 Python 虚拟环境
- pyenv 实现Python多版本自由切换
- 用 Python 对 Excel文件进行批量操作
- Python - 接入钉钉机器人
- Python - 抓取 iphone13 pro 线下店供货信息并发送到钉钉机器人,最后设置为定时任务
- crontab - 解决 mac 下通过 crontab 设置了 Python 脚本的定时任务却无法运行
- [源码解析] PyTorch分布式(5) ------ DistributedDataParallel 总述&如何使用
- Python科普系列——类与方法(上篇)
- SAP对STO的交货单执行PGI,报错 -Fld selectn for mvmt type 643 acct 400020 differs
- Spring Boot 实现通用 Auth 认证的 4 种方式
- 盘点4种使用Python批量合并同一文件夹内所有子文件夹下的Excel文件内所有Sheet数据
- OushuDB 学习经验分享(三):技术特点
- Java和Python思维方式的不同之处
- Python中日志记录新技能
- 奥比中光Gemini OpenCV—Python使用