本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/29830

闭包与装饰器

  • 闭包

闭包(Closure)是指在一个嵌套的函数内部访问其外部函数中定义的变量或函数的能力。换句话说,闭包是一个函数对象,它可以记住并访问它创建时的上下文环境中的变量。


闭包通常由两个部分组成:内部函数和与其相关的环境变量。


内部函数是在外部函数中定义的函数,它可以访问外部函数中的局部变量和参数,以及外部函数所在的作用域中的变量。


环境变量是在外部函数中定义的变量或其他函数对象,它被内部函数引用并记住,即使外部函数执行完成后仍然存在。

  • 装饰器

装饰器是Python提供的一种语法糖,装饰器使用@符号加上装饰器名称,用于修改其他函数的行为,并且在不修改原始函数定义和调用的情况下添加额外的功能。


装饰器提供了一种简洁而优雅的方式来扩展和修改函数或类的功能。它本质上就是一个闭包函数。


装饰器的功能特点:
不修改已有函数的源代码
不修改已有函数的调用方式
给已有函数增加额外的功能

def counter(func):
    def inner():
        global num  #修改全局变量需要使用 global , 修改外函数局部变量需要使用 nonlocal
        func()
        num += 1
    return inner

@counter
def show():
    pass

if __name__ == '__main__':
    num = 0
    for i in range(0, 5):
        show()
    print("show函数调用的次数:",num)