一、闭包的基本概念
对于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)
运行结果: