5个有用的Python装饰器用例

147 阅读2分钟

前段时间,我在Twitter上问。

我很好奇你用#Python装饰器做什么?

我得到了相当惊人/有见地的回应。

我很好奇你用#Python装饰器做什么?

如果能在我们的文章中加入一些使用案例就更好了:https://t.co/gDOlhrazRC

- Bob Belderbos(@bbelderbos)2021年1月30

对我来说,下一步显然是要看一些例子/用例。

所以下面是装饰器的5个有用的应用。

研究它们,然后在你自己的工作中应用类似的东西。

1.去除重复的代码

第一个是最简单的,因为@prashanttgs发布了一个伟大的例子。

对我来说,这更容易做到。

@conditional_function 
def fun(): 
...

...的多个函数比这样做更容易。

def fun():     
    if conditional_function ...

对我来说,这显示了抽象化重复逻辑的好处,使你的函数(类)更精简。

2.2.防止不良输入

这是由@Halmsy强调的一个伟大的用例

还有一个很好的例子是pydantic模块及其验证器装饰器(@mikehawryluk)。

github.com/samuelcolvi…

3.pytest

按照@brianokken的说法:pytest夹具和标记,包括参数化

是的,我们每天都在使用这些装饰器,我们喜欢它们。

固定器装饰器的源代码。

github.com/pytest-dev/…

4.记录

@Kay_Hoogland指出了一个很酷的项目,叫做memo。

在那里我们看到一个很酷的time_taken装饰器。

github.com/koaning/mem…

本周我们还自己添加了一个小的定时器装饰器提示。

在这里,我们用一个装饰器来为一个函数的执行时间计时:pic.twitter.com/EXiEeTJsRe

- PyBites(@pybites)2021年1月31

5.认证

看看主要网络框架中用于访问控制的装饰器是很有意思的。

flask.palletsprojects.com/en/1.1.x/pa…

github.com/django/djan…


此外,这里有两个装饰器,你可以在标准库中找到

  • @property用来做计算属性或控制属性访问,请看这里这里的例子。我们在这篇文章中也介绍了它们。
  • @classmethod,你可以用它来给你的类添加替代构造函数,请看这里的例子。

我希望这篇文章能给你一些灵感,在你的工作中更多地使用这种强大的设计模式。

如果你想写一些自己的东西,请查看我们平台专门的Decorators学习路径

Code up some decorators on our CodeChalleng.es Python exercise platform.

在学习了两个重要的模式:装饰器和上下文管理器之后,你的Python工具包将不再是原来的样子了。你可以在我们的平台上编写12个相关的Bites ...

好了,结束了(Julian_让我把这句话写进去,开玩笑的[不,他没有!--Julian])_。

编码愉快

- 鲍勃