闭包函数


闭包函数

一、基础知识

所谓闭包函数就是定义在函数内部的函数,但是他有一些限制条件:

1、定义在函数内部

2、用到了外部函数名称空间中的名称

def index():
    name = 'jason'
    def inner():
        print(name)

二、作用

闭包函数在使用的过程中的作用其实很简单——是另外一种给函数体代码传参的方式!!!

通过之前的学习我们了解到,当函数需要参数的时候我们会在括号内加入他们需要的参数,这是给函数传参的第一种方式。第二种方式就是使用闭包函数给其他函数体代码传参。代码举例:

# 给函数体代码传参的方式1:代码里面缺什么变量名形参里面就补什么变量名
def register(name,age):
    print(f"""
    姓名:{name}
    年龄:{age}
    """)
register('jason', 18)
# 给函数体代码传参的方式2:闭包函数
def outer(name, age):
    def register():
        print(f"""
        姓名:{name}
        年龄:{age}
        """)

    return register


res = outer('jason', 18)
res()
res()
res = outer('kevin', 28)
res()
res()
res()

第一种情况下的参数传参简单明了就不做具体说明了,第二种方式是使用了闭包函数的方式来传参的,由于工作流程有些绕,我们分条具体解释:

1.当我们运行代码的时候会先定义函数,但是不会运行其中的代码。

2.接着就到了res代码堆这里,我们需要先看代码右边的内容进行了什么操作

3.第一个res代码运行了outer函数并且给他传入了'jason', 18两个参数,之后我们回到代码内部根据流程运行代码,最后发现返回值是register函数名

4.这里我们可以发现第一个res变量名绑定了register函数名

5.后面两行代码都是在调用res绑定的当前参数下的register函数,返回的信息是'jason', 18

6.到了第二次给res变量名赋值的地方,也是一样的判断方式,可以发现现在res绑定成了在'kevin', 28两个参数下的register函数

7.之后又是连续几次调用res绑定的在'kevin', 28两个参数下的register函数,返回的信息也是'kevin', 28


posted @   致丶幻  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
  1. 1 So Far Away (Acoustic) Adam Christopher
  2. 2 雪 Distance Capper&罗言RollFlash
  3. 3 CollapsingWorld
  4. 4 Call You Tonight Johnta Austin
雪 Distance - Capper&罗言RollFlash
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

词:Capper/罗言

曲:Capper/罗言

编曲:IOF

混音:刘城函

母带:张步若@RSS

可怜像扑火飞蛾

任凭无用的勇敢将我淹没

你充满防备的样子不像我

会不会太久

久到这结果

明明我想要却不敢对你说

我好想放手

却幻想太多

悲叹你不是世上另一个我

我愿把胸膛解剖

公开脆弱的结构

有在跳动的血肉

别再只丢我骨头

心甘情愿囚禁在深渊

舔舐着伤口和刀尖

可是雪 飘进双眼

看不见你桥牌的谎言

心甘情愿囚禁在深渊

烧一捧雪花做硝烟

为什么抿下嘴唇尝起来像铁锈

我怕这沼泽死水就要将我淹没

快要变成玩偶

可以随意玩弄

只要和你联手

我愿把胸膛解剖

公开脆弱的结构

有在跳动的血肉

别再只丢我骨头

在这么冷的天

再靠近我一点

可是雪 飘进双眼

看不见你桥牌的谎言

心甘情愿囚禁在深渊

心甘情愿囚禁在深渊

烧一捧雪花做硝烟

点击右上角即可分享
微信分享提示