目录
一、闭包
作用
示例
二、nonlocal关键字
示例
三、atm取钱的闭包实现
四、闭包注意事项
优点
缺点
我陪你走了一段路,你最了解我不是吗
—— 24.11.11
一、闭包
在函数嵌套的前提下,内部函数使用了外部函数的变量,并且外部函数返回了内部函数,我们把这个使用外部函数变量的内部函数称为闭包。
定义双层嵌套函数,内层函数可以访问外层函数的变量
将内存函数作为外层函数的返回,此内层函数就是闭包函数
作用
使内部函数可以使用外部变量,而不需要定义全局变量,保证了函数的安全性
示例
outer是outer函数中传入的固定的品牌名,而被确定logo变量的函数inner直接传入msg参数
def outer(logo):def inner(msg):print(f"<{logo}>{msg}<{logo}>")return innerfn1 = outer("Nike")
fn1("Hello")
fn2 = outer("Adidas")
fn2("World")
二、nonlocal关键字
通过在内部函数中定义nonlocal关键字,可以修改内部函数中的值
需要用nonlocal声明这个外部变量
示例
# 使用nonlocal关键字修改内部函数的值
def outer(num1):def inner(num2):nonlocal num1num1 += num2print(num1)return innerfn = outer(27)
fn(114)
fn(9)
fn(45)
三、atm取钱的闭包实现
# 使用闭包实现ATM小案例
def account_create(amount = 0):def atm(num,deposit = True):nonlocal amountif deposit:amount += numprint("存款:",num,",账户余额:",amount)else:amount -= numprint("取款:",num,",账户余额:",amount)return atmatm = account_create()
atm(100)
atm(200,True)
atm(210,False)
注:内部函数依赖外部变量,外部变量本质是外层函数的内部临时变量
四、闭包注意事项
优点
使用闭包可以让我们得到:
① 无需定义全局变量即可实现通过函数,持续的访问、修改某个值
② 闭包使用的变量的所用于在函数内,难以被错误的调用修改
缺点
由于内部函数持续引用外部函数的值,所以会导致这一部分内存空间不被释放,一直占用内存