python基础闭包理解

防锤宣言:本教程仅为个人理解,如有错误还请指正

翻阅关于闭包的时候发现python的讲解相对少一点。大部分是java的,故做此教程

一,基础闭包

第一个小目标

我们先设定一个目标:

求解一元一次方程y=2+3的值

这个很简单

y=2+3
print(y)

得到y=5

第二个小目标

好的,现在我们升级难度,要求2和3,可以变成从外界传入的参数

那么我们增加函数的操作得到:

def yy(a,b):
    y = a + b
    print(y)
if __name__ == '__main__':#这一行只是方便调试,没有它也可以
    myf=yy(a=2,b=3)

 现在可以更改a和b的值

第三个小目标

现在就可以升级难度了,这次目标是:

请制作一个二元一次方程组,y=ax+b,这个变量“x”希望是可以通过缓存方式调用的

那么接下来就可以加上闭包的操作得到:

def yy(a,b):
    def xx(x):
        y = a * x + b
        print(y)
    return xx
if __name__ == '__main__'
    mya=yy(a=2,b=3)
    mya(1)

到这里可能有些人会有点迷糊了,这一步是怎么达成的?

那么我们拆分一下新出现的每一行代码的作用就可以了,(当然你可以自己使用pycharm里面的“调试”自己尝试一下)

第三个小目标解释

首先在yy函数内部增加一个返回值,这个返回值是用来引用内部函数xx

这一步返回值十分关键,它代表mya=y(a,b)转变为了mya=xx

return xx

 接下来执行了下面这一行代码,这行代码的作用是将参数x的值返回给内部函数

由于上一步的返回值,导致这一步不再是mya(y的参数)而变成了mya(x的参数)

mya(1)

这时执行下方代码,y=2*1+3  print(输出y的值)

def xx(x):
    y = a * x + b
    print(y)

这就简单的达成了闭包操作逻辑

二,nonlocal关键字

nonlocal:用来从内部函数改变外部函数的参数值

举个例子:我们在前面基础上新加一个要求,新增加一个参数c,并且每多调用一次,就增加一

那么我们可以增加一个nonlocal关键字,用来告诉python解释器,我要通过内部函数改变外部函数传进来的参数值

那么就得到了下面的代码:

def yy(a,b):
    c=0
    def xx(x):
        nonlocal c  #声明要改变变量c
        c+=1  #每调用一次C就加1
        y = a * x + b + c
        print(y)
    return xx
if __name__ == '__main__'
    mya=yy(a=2,b=3)
    mya(1)

以上就是python的基础闭包教程了,谢谢观看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值