自学内容网 自学内容网

python 闭包讲解

学习目标:掌握闭包的用途和用法,掌握nonlocal关键字的作用

1.闭包初识

depsoit=True意思是判断是取款还是存款。True存款,False取款。

全局变量容易被人修改,如何解决呢?

·将变量定义在函数内部是行不通的

·我们需要使用闭包

目的就是想要我们既可以使用这个全局变量,又不想让那个全局变量可以被修改

先来看一个简单的闭包问题

调用outer,传入logo,返回inner,可以让我们的内部函数去依赖于一个外部变量,最终达到的效果就是可以让我们这个内部的函数正常运行,同时它依赖的外部变量也能够得到他想要的值

fn1就等于inner,调用fn1就等于调用inner

当我们想要去修改它的外部变量的时候,我们就可以重新调用一下outer,就可以去给他重新重置一个外部变量

2.nonlocal关键字

这样别的代码根本无法修改你的num1变量

3.使用闭包实现ATM取钱存钱案例

# 使用闭包实现ATM小案例·
def account_create(initial_amount=0):
    def atm(num,deposit=True):  # True存钱False取钱
        nonlocal initial_amount
        if deposit:
            initial_amount += num
            print(f"存款:+{num},账户余额:{initial_amount}")
        else:
            initial_amount -= num
            print(f"取款:-{num},账户余额:{initial_amount}")
    return atm
atm = account_create()
atm(100)
atm(200)
atm(100,deposit=False)
initial_amount只是一个作用于函数的临时变量,并不是全局变量,所以无法修改,而且它可以一直保留住,不管你atm多少次,他都一直可以使用,结果是一个持续的累加过程,一直去存储这个值

外部变量本质上就是外层函数的内部临时变量

但是其实就一个变量的内存,内存不大,缺点就不是很明显

4.总结


原文地址:https://blog.csdn.net/2401_87332612/article/details/143694078

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!