了解 Python 中的装饰器
简介:
您是否曾经遇到过 python 代码库,其中“@login_required”或“@”符号与函数或类之上的任何其他后缀一起使用,您立即开始想知道它是什么或它的目的是什么?
或者您过去是否使用过一个框架,其中文档说您应该使用特定的装饰器来实现特定的功能,但您只是不知道其实现是如何在幕后完成的并且很想知道?
或者,您对装饰器的概念还很陌生,并且很想了解它,这是可以理解的,坚持下去,您已经走上了正轨。
先决条件:
为了最大限度地理解本教程中的概念,需要具备 python 编程的背景知识。
什么是装饰器:
python 中使用装饰器为类和函数提供额外的功能,而无需根据具体情况更改类或函数的初始代码结构。装饰器有时被称为“语法糖”,因为它们倾向于改善类或函数的行为。
如果您遇到这样的情况,即您的类函数与某些功能捆绑在一起,而这些功能已经被您的程序或软件的大部分使用(视情况而定),并且您想要类/函数对程序中的预期用途进行轻微修改,同时您不想破坏现有代码库的功能,因为它的耦合程度如何,您认为最好的方法是什么情况如何?
您猜对了,您只需装饰类/函数即可实现所需的功能,而不会破坏正在使用它们的现有程序。
就像本教程的介绍部分中提到的“@login_required”用于引用实例一样,它确实是flask框架中使用的一个装饰器,而flask框架恰好是一个流行的后端框架,每当“@login_required”装饰器放置在视图函数之上,它导致对视图函数的访问仅限于已通过身份验证/登录到应用程序的用户。在这里,我们再次看到装饰器的实际应用以及如何在构建软件中使用它。
从技术角度和较低的层面来看,装饰器是将其他函数或类作为参数,然后将它们包装在扩展/修改其功能的包装函数中的函数,然后装饰器函数现在返回完成修改的结果通过包装函数。
这里有一些代码片段,用于帮助澄清和更好地理解;
def hello(): print("hello readers")
hello() 是一个被定义为在调用时显示“hello reader”的函数,并且它可能已经在我的程序的较大部分中使用。
现在我需要修改 hello 函数的显示消息,而无需在程序中显式定义新函数,我可以在 hello() 函数上应用装饰,只需使用装饰器即可实现所需的修改结果。
第一步是定义你的装饰器函数
def decorator(func): def wrapper(): print("in the decorated function") func() print("bye, leaving the decorated function") return wrapper
第二步也是最后一步,将装饰器函数作为“@”符号的后缀放置在要装饰的函数之上。
@decorator def hello(): print("Hello readers") # Calling the decorated function hello() This outputs: in the decorated function Hello readers bye, leaving the decorated function
总之,python 中的装饰器在不改变已定义代码结构的情况下修改函数和类的行为,从而改善类或函数的某些行为(视情况而定)。
感谢您的阅读。
编码愉快...
以上就是了解 Python 中的装饰器的详细内容,更多请关注其它相关文章!