优点
- 无需定义全局变量即可实现通过函数,持续的访问、修改某个值
- 闭包使用的变量的所用于在函数内,难以被错误的调用修改
缺点
- 由于内部函数持续引用外部函数的值,所以会导致这一部分内存空间不被释放,一直占用内存
代码
def ATM(balance):
def change (num,type=True) -> int :
nonlocal balance # 使用nonlocal关键字修改外部函数的值
if type == True: # 存钱
balance += num
print(f"<存款>{num}元,当前余额:{balance}")
else: # 取钱
balance -= num
print(f"<取款>{num}元,当前余额:{balance}")
return balance # 返回修改后的余额
return change
atm = ATM(100)
atm(10)
atm(10,1)
for x in range(1,10):
atm(x)
for x in range(10,20):
atm(x,False)
res:int = atm(200)
print(res)
结果
<存款>10元,当前余额:110
<存款>10元,当前余额:120
<存款>1元,当前余额:121
<存款>2元,当前余额:123
<存款>3元,当前余额:126
<存款>4元,当前余额:130
<存款>5元,当前余额:135
<存款>6元,当前余额:141
<存款>7元,当前余额:148
<存款>8元,当前余额:156
<存款>9元,当前余额:165
<取款>10元,当前余额:155
<取款>11元,当前余额:144
<取款>12元,当前余额:132
<取款>13元,当前余额:119
<取款>14元,当前余额:105
<取款>15元,当前余额:90
<取款>16元,当前余额:74
<取款>17元,当前余额:57
<取款>18元,当前余额:39
<取款>19元,当前余额:20
<存款>200元,当前余额:220
220