卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章20399本站已运行347

Python装饰器的常见用途是什么?

<?xml encoding="utf-8" ?>

Python装饰器的常见用途是什么?

在本文中,我们将学习Python装饰器的常见用法

Python装饰器是什么?

Python装饰器是一段代码,允许对现有函数进行添加或更新,而不必更改底层函数定义。当程序运行时,它尝试编辑自身的另一部分,这被称为元编程。

装饰器是一种函数类型,它接受一个函数并返回另一个函数,或者接受一个类并返回另一个类。它可以是任何可调用的(函数、类、方法等),并且可以返回任何内容;它也可以采用一个方法。

Python 装饰器使用起来很简单。

装饰器接受一个可调用对象,该对象实现了特殊方法__call()__,被称为可调用对象,它会添加一些功能,并返回一个可调用对象。

Example

的中文翻译为:

示例

@somedecorator
def exmple_decorators():
   print("Hello tutorialspoint python decorators")

另一方面,编写装饰器需要一套完全不同的技能。这不是一件简单的事;您必须完全理解以下内容 -

  • 关闭
  • 将函数用作一流参数,
  • 变量参数
  • 参数解包和
  • 甚至一些关于Python如何加载其源代码的信息。

掌握和完善所有这些需要很长时间。而你已经有了一长串要学习的东西。

这值得你花时间吗?

答案显然是。编写装饰器的主要优点是什么?它们使您能够在日常发展中毫不费力地表现出色?

让我们看看!

分析、日志记录和检测

我们经常需要专门衡量正在发生的情况并收集量化不同操作的指标,尤其是对于大型应用程序。装饰器可以通过将这些值得注意的事件封装在自己的函数或方法中,以极其易读且简单的方式解决此要求。

验证和运行时检查

Python的类型系统是强类型但动态的。尽管它有很多优点,但这也意味着一些问题可能会在编译时被更静态类型的语言(如Java)检测到。

除此之外,您可能希望对进入和退出系统的数据实施更复杂的自定义检查。装饰器可以帮助您管理所有这些并将其同时应用于多个功能。

创建框架

一旦你学会了编写装饰器,你就能够从它们简洁的语法中获益,这使你能够轻松地为语言添加语义。这是接近于能够扩展Python语法的最佳选择。

许多著名的开源框架都使用它。 Web 应用程序框架 Flask 使用它来将 URL 路由到处理 HTTP 请求的函数。

重用不可重用的代码

通过优雅的函数语法、函数式编程支持和完整的对象系统,Python提供了一些非常强大的工具,可以将代码封装成易于重用的形式。然而,仅凭这些工具无法捕捉到某些代码重用的模式。

考虑使用 Flakey API。您通过 HTTP 向能够理解 JSON 的对象发送查询,并且 99.9% 的情况下它都能正常工作。但所有请求中的一小部分会导致服务器返回内部错误,要求您重试该请求。在这种情况下,您需要添加一些重试逻辑。

Example

的中文翻译为:

示例

# Creating a decorator function
def decoratorFunction(demofunction):
	def innerFunc():
		print("Yup...It is a decorated function")
		demofunction()
	return innerFunc()

# Creating a regular ordinary function
def normalFunction():
	print("Yup...It is a normal ordinary function")

decoratedResult = decoratorFunction(normalFunction)
decoratedResult

输出

执行时,上述程序将生成以下输出 -

Yup...It is a decorated function
Yup...It is a normal ordinary function

decoratorFunction()是前面示例中的一个装饰器。简而言之,装饰器是一个包装器,它包装一个对象(而不改变它),并为原始对象添加新功能。因为这是一种常用的技术,Python提供了一个语法特性(称为装饰器),使其更容易使用。考虑下面的示例作为一个例子−

下面的函数:

@decorated_func
def ordinary_function():
   print("This is ordinary function")

等于

def ordinary_function():
   print("This is ordinary function")
decorated = decorated_func(ordinary_func)

提升你的职业生涯

一开始编写装饰器很困难。这也不是火箭科学,但需要花费大量精力来学习和理解许多开发人员永远不会费心的细节。这对你有利。如果您成为团队中学习正确编写装饰器并编写能够回答现实问题的装饰器的人,其他开发人员将使用您的装饰器。一旦编写装饰器的艰苦工作结束,它们的使用起来就非常简单。这可以大大增加您开发的代码的积极影响。它甚至可能让你成为大师。

结论

装饰器是一个令人难以置信的功能,可用于多种用途。它不仅仅是“接受函数或类并返回函数或类的函数或类”。

无论您使用什么方法来学习构建装饰器,您都可能会对使用它们能够实现的目标以及它将如何(不是开玩笑)永远改变您编写 Python 代码的方式感到兴奋!

卓越飞翔博客
上一篇: C# 的优先级队列
下一篇: 返回列表

相关推荐

留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏