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)

你可能感兴趣的:(python,服务器,开发语言)