一、闭包的基本概念






对于outer来说,logo是可变的、临时的内部变量,不是全局的外部变量,不容易被篡改,安全;对于inner来说,外部变量是固定的,可以正常访问,可以持续不断的存在。
代码演示:
def outer(logo):
def inner(msg):
print(f"<{logo}>{msg}<{logo}>")
return inner
fn1=outer("hello")
fn1("python")
fn1("1981")
fn2=outer("你好")
fn2("hello")
fn2("apple")
运行结果:




查看是否是闭包:


二、nonlocal关键字

代码演示:
def outer(num1):
def inner(num2):
nonlocal num1
num1+=num2
print(num1)
return inner
f1=outer(10)
f1(5)
f1(10)
运行结果:

三、atm 小案例
代码演示:
def account_create(initial_amount=0):四
def atm(money,deposit=True):
nonlocal initial_amount
if deposit:
initial_amount+=money
print(f"存钱,+{money},余额:{initial_amount}")
else:
initial_amount-=money
print(f"取钱,-{money},余额:{initial_amount}")
return atm
atm=account_create()
atm(100)
atm(200)
atm(50,False)
运行结果:

四、闭包的注意事项
五、总结

2万+

被折叠的 条评论
为什么被折叠?



