python
#闭包的作用
#全局变量有被修改的风险,代码在命名空间上不够干净整洁
#第一种,不使用闭包的场景
account_amount=0
def atm(num,deposit=True):
global account_amount
if deposit:
account_amount+=num
print(f"存款:+{num},账户余额{account_amount}")
else:
account_amount-=num
print(f"存款:-{num},账户余额{account_amount}")
atm(300) #存款:300,账户余额300
atm(300) #存款:300,账户余额600
atm(100,False) #存款:100,账户余额500
#从上面可以看到全局变量在被不断的修改,同时,代码也不够干净
#使用闭包的写法见如下,这种就不会有全局变量了,这种就是闭包了
def account_create(initial_amount=0):
def atm(num,deposit=True):
nonlocal initial_amount #这条句子定义后,后续可以在修改变量
if deposit:
initial_amount+=num
print(f"存款+{num},账户余额{initial_amount}")
else:
initial_amount-=num
print(f"存款-{num},账户余额{initial_amount}")
return atm
fn=account_create()
fn(100) #存款+100,账户余额100
fn(200) #存款+200,账户余额300
#闭包的优点 无需要定义全局变量就可以通过函数,持续的访问修改某个值,闭包使用的变量在于函数内,难被错误的调用修改
#缺点,由于内部持续引用外包函数的值,所以会导致内存空间不足,一直占用内存