python---闭包
优点:1)无需定义全局变量即可实现通过函数持续访问修改某个值 2)闭包使用的变量的所用于在函数内,难以被错误的调用修改
缺点:由于内部函数持续引用外部函数的值,所以会导致这一部分内存空间不被释放,一直占用内存
简单的闭包:
def outer(logo):
def inner(msg):
print(f"<{logo}>{msg}<{logo}>")
return inner
fn1 = outer("hi") # fn1 是一个函数
fn1("大家好")
fn2 = outer("hello")
fn2("你好")
修改外部函数变量的值---使用nonlocal关键字修饰外部函数大的变量才可以在内部函数中修改他
def outer(num1):
def inner(num2):
nonlocal num1
num1 += num2
print(num1)
return inner
fn1 = outer(10)
fn1(2) # 12
fn1(4) # 16
案例:
def account_amount(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
fn1 = account_amount()
fn1(100)
fn1(200)
fn1(300, deposit=False)