python之嵌套 闭包 装饰器 global、nonlocal关键字

嵌套: 在函数的内部定义函数
闭包: 符合开放封闭原则:在不修改源代码与调用方式的情况下为函数添加新功能 
知识兔
# global  将局部变量变成全局变量num = 100def fn1():    global num    num = 600    return numprint(fn1())  # 600# nonlocal 将局部变量变成嵌套变量def outer():    num = 888    def inner():        nonlocal num        num = 666        print(num)  # 666    inner()    print(num)  # 666outer()# 装饰器# 在不改变源代码的形势下 添加新功能def outer(func):    def inner(*args,**kwargs):        # pass # 新功能        res = func (*args,**kwargs)   # 解压带给原功能        pass # 新功能        return res    return inner# 使用装饰器(outer),得到新功能(inner)@outerdef fn():    passres=fn()print(res)def foo(fn):    # 定义一个嵌套函数    def bar(a):        fn(a * (a - 1))        print("*" * 15,)        return fn(a * (a - 1))    return bar'''下面装饰效果相当于:foo(my_test),my_test将会替换(装饰)成该语句的返回值;由于foo()函数返回bar函数,因此my_test就是bar同时,my_test 的参数 a 对应 bar 函数的参数 a'''@foodef my_test(a):    print("==my_test函数==", a)# 打印my_test函数,将看到实际上是bar函数print(my_test,1111111)# 下面代码看上去是调用my_test(),其实是调用bar()函数my_test(10)









计算机