Python闭包和装饰器原理

# Python闭包和装饰器

############# 闭包 ##############
'''
    1. 一个外层函数,内嵌一个内层函数;
    2. 内层函数使用外层函数的参数;
    3. 外层函数将内层函数作为返回值返回
'''

# 外层函数
def outer(msg):
    # 内层函数
    def inner():
        # 内层函数使用外层函数的参数
        print(msg)
    # 将内层函数作为返回值返回
    return inner

inner = outer('hello world')
inner()    # 结果打印:hello world

# 在这个过程中,调用完outer()之后,将变量msg保留了下来,在inner()调用时可以继续使用


############# 装饰器 ##############
'''
    1. 装饰器的本质就是闭包,只不过外层函数的参数就是 “要装饰的那个函数”;
'''

# 定义一个装饰器decoration
def decoration(func):

    def inner():
        # 在前面添加新的功能
        print('before new function!')

        # 调用原本的函数 
        func()

        # 在后面添加新的功能
        print('after new function!')

    return inner

# 定义函数hello
def hello():
    print('hello')

# 用装饰器decoration装饰函数hello
hello = decoration(hello) 
hello()
'''
    结果打印:
    before new function!
    hello
    after new function!
'''

# 用装饰器decoration来装饰函数的另一种写法,效果是一样的
@decoration
def hello_2():
    print('hello_2')

hello_2()
'''
    结果打印:
    before new function!
    hello_2
    after new function!
'''

  

posted @ 2024-05-27 14:14  映辉  阅读(12)  评论(0编辑  收藏  举报