python为什么是蛇_【大蟒蛇】简谈Python的闭包【原创】

我们知道在Python中一切皆对象,包括函数也是一样,函数名可以赋值给一个变量,也可以当作一个参数传递给另外一个函数的形参,当然也可以将函数名作为另外一个函数的返回值使用,总之函数的使用可以非常的灵活,这些就涉及到了Python的高阶函数。

将函数作为参数进行传递

函数的参数能接收变量,那么一个函数就可以接收另一个函数的名称作为其参数。

再看下面这个例子,编写函数的时候,我们不用去管具体的执行逻辑,即无需判断是执行加法呢还是执行除法,只有代码执行的时候才决定调用哪个函数,实际传入的是加法名称,就执行加法函数,实际传入的是除法名称,就执行对应的除法函数。

def add(x, y):# 定义一个加法函数

returnx+y

def div(x, y):# 定义一个除法函数

return x/y

# 定义一个用于运算的函数。

def opt(fun_name, x, y):# 注意:第一个参数需要传递一个函数名称进来

return fun_name(x, y)# 此处将x和y又作为参数再次传给了第一个参数(函数)

if __name__ == "__main__":

print(opt(add, 4, 5)) # 传入了加法函数,则自动执行两数求和

print(opt(div, 8, 2)) # 传入了除法函数,则自动执行两数相除

函数的闭包

一般情况下,一个函数执行结束,该函数内的局部变量都会消失。但是有些情况下,我们希望先保留一下函数中的临时局部变量,怎么办呢?这时候就用到了闭包。闭包,就是能够读取其他函数内部变量的函数。闭包的最大作用实际就是Python的装饰器原理了。

形成闭包的条件:在一个外函数中定义了一个内函数。

内函数里运用了外函数的临时变量。

并且外函数的返回值是内函数的引用

我们再来看一个闭包的实际应用吧。我们希望在执行某些函数前先打印些东西,例如打印函数开始执行的系统时间,打印日志信息等。这里我们简单打印一条横虚线吧。

def add(x, y): # 这里定义了一个普通的加法函数,

returnx+y

defprt_log(fun): # 这里定义了一个闭包函数

def add1(*args, **kwargs): # 定义一个内部函数,可以接受任何形式的参数

print("---------") # 这就是执行函数前先要打印的那条横虚线

return fun(*args, **kwargs) # 将要执行传入的函数

return add1 # 把这个内部函数的名字返回。注意不加括号。

if __name__ == "__main__":

k1 = prt_log(add) # 调用前面的闭包函数,并将add函数名称传入

print(k1(5, 6)) # 此时k1就是闭包返回的内部函数了

输出:

--------- # 在调用加法函数前,先输出打印了一条虚线

11

【重要消息】感谢知友您能够看到这部分内容,本文是软件测试系列知识中python脚本语言中的一篇,笔者认为本部分全面的知识应该包含如下图所示的内容:

如果知友对这部分内容感兴趣,可以持续关注小编的账号,除此之外,小编还录制了不少这方面的技术视频,知友如果有需要,可以私聊本小编获取哦!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值