欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > python中闭包与装饰器

python中闭包与装饰器

2025/3/29 18:33:53 来源:https://blog.csdn.net/2402_88219100/article/details/146487777  浏览:    关键词:python中闭包与装饰器

目录

一、递归函数 

二、闭包

三、装饰器

 标准装饰器:​编辑

 语法糖:

被装饰的函数有参数:

 被装饰的函数有可变参数:

多个装饰器


 

一、递归函数 

递归函数是指在函数内部调用自身的函数。在Python中,可以使用递归函数来解决一些问题,比如遍历树形结构、计算阶乘、斐波那契数列等。递归函数通常包含两部分:基本情况(base case)和递归情况(recursive case)。基本情况是指递归函数应该在什么情况下停止递归,而递归情况则是指函数调用自身的情况。

下面是一个示例,展示如何使用递归函数来计算阶乘:

def factorial(n):if n == 0:return 1else:return n * factorial(n - 1)result = factorial(5)
print(result)  # 输出 120

在这个示例中,factorial 函数计算一个数的阶乘。当输入参数 n 等于0时,函数返回1作为基本情况。否则,函数将调用自身并返回 n * factorial(n - 1)。递归函数在 factorial(5) 中计算了 5 * 4 * 3 * 2 * 1,最终返回120。

需要注意的是,递归函数可能会导致堆栈溢出(stack overflow)的问题,所以在使用递归函数时需要确保基本情况能够终止递归,否则会出现无限递归的情况。

示例以及递归函数优缺点:

 

二、闭包

闭包(closure)是指在函数内部定义的函数,并且该内部函数可以访问外部函数中的局部变量。简而言之,闭包是一种函数,它可以捕获并维持其所在作用域的状态,即使这个作用域已经不再存在。

在Python中,闭包通常是通过在一个函数内部定义另一个函数,并且返回这个内部函数的方式来实现的。例如:

def outer_function():message = "Hello"def inner_function():print(message)return inner_functionmy_function = outer_function()
my_function()  # 输出 "Hello"

在这个示例中,inner_function 是一个闭包,它可以访问外部函数 outer_function 中的 message 变量。当调用 outer_function 后,返回的函数 my_function 是一个闭包,可以在其被调用时访问 message 变量并打印出 "Hello"。

闭包的一个重要特点是,它可以捕获并记住其所在作用域的状态。这使得闭包可以在函数外部保持对其所需变量的引用,即使这些变量在外部函数执行完毕后并不再存在。

 示例:

 

三、装饰器

在Python中,装饰器(Decorator)是一种用于修改或包装函数或方法的工具。装饰器允许在不修改原函数代码的情况下,对函数进行功能扩展、修饰或包装,从而实现更灵活和可重用的代码结构。装饰器本质上是一个函数,它接受一个函数作为输入,并返回一个新的函数。

下面是一个简单的示例,演示了如何定义和使用装饰器:

# 定义一个装饰器函数
def my_decorator(func):def wrapper():print("Before calling the function")func()print("After calling the function")return wrapper# 使用装饰器来装饰函数
@my_decorator
def say_hello():print("Hello!")# 调用被装饰后的函数
say_hello()

在这个示例中,my_decorator 是一个装饰器函数,它接受一个函数作为参数,并返回一个新的函数 wrapperwrapper 函数在调用被装饰函数之前和之后打印一些信息。通过在 say_hello 函数上方添加 @my_decorator,我们将 say_hello 函数传递给 my_decorator 装饰器函数,从而将其装饰。

当调用 say_hello() 时,实际执行的是被装饰后的函数,即 wrapper 函数。这样,装饰器的功能就被成功应用到了原始函数上。

 标准装饰器:

 

 语法糖:

被装饰的函数有参数:

 被装饰的函数有可变参数:

多个装饰器

多个装饰器的装饰过程,离函数最近的装饰器先装饰,然后外面的装饰器再进行装饰,由内到外的装饰过程。

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词