hr|Python 中的装饰器,会让你的写代码变得更好。生活更加神奇

hr|Python 中的装饰器,会让你的写代码变得更好。生活更加神奇

文章图片

hr|Python 中的装饰器,会让你的写代码变得更好。生活更加神奇

如果有一件事让 Python 非常成功 , 那就是它的可读性 。 其他一切都取决于此:如果代码不可读 , 则很难维护 。 它也不是初学者友好的 - 一个被不可读代码困扰的新手有一天不会尝试编写自己的代码 。
在装饰器出现之前 , Python 已经具有可读性和初学者友好性 。 但是随着该语言开始用于越来越多的事情 , Python 开发人员觉得需要越来越多的功能 , 同时又不会弄乱环境并使代码不可读 。
装饰AR ? 完全实现功能的黄金时段的例子 。 转过头来确实需要一段时间 , 但这是值得的 。 当您开始使用它们时 , 您会注意到它们不会使事情变得过于复杂并使您的代码整洁而时髦 。
简而言之 , 装饰器是处理高阶函数的一种巧妙方式 。 所以让我们先看看那些!
函数返回函数
假设你有一个函数——它迎接你传递给它的任何对象 。 假设您有另一个功能 , 它会在适当的地方插入“Simon” 。 我们如何将两者结合起来?在你往下看之前先想一想 。  greet()  simon()

输出是 。 希望这对你有意义! 'Hello Simon!'
当然 , 我们可以直接调用. 然而 , 重点是我们可能想要将“Simon”放入许多不同的函数中 。 如果我们不使用“Simon”而是使用更复杂的东西 , 我们可以通过将其打包成一个函数来节省大量代码行 , 例如. greet(\"Simon\") simon()
其他函数内部的函数

我们也可以在其他函数中定义函数 。 这很重要 , 因为装饰者也会这样做!没有装饰器 , 它看起来像这样:【hr|Python 中的装饰器,会让你的写代码变得更好。生活更加神奇】函数 respect() 返回一个函数;返回 congrats 函数 , (或其他一些参数而不是)返回 insult 函数 。 要调用函数 , 请输入和 , 就像普通函数一样 。  respect(\"yes\")  respect(\"brother\")  \"brother\" respect(\"yes\")()  respect(\"brother\")()

知道了?然后你就准备好了装饰师!Python 装饰器的 ABC带有@ 符号的函数
让我们尝试结合前面的两个概念:一个函数接受另一个函数并定义一个函数 。 听起来令人难以置信?考虑一下:
最后一行确保我们不再需要调用;就足够了 。 你知道那个调用的输出是什么吗?如果您不确定 , 请自己尝试! startstop(roll)()  roll()
现在 , 作为一个很好的选择 , 我们可以在定义后立即插入: startstop()
这并不相同 , 但胶水到的初期 。  roll()  startstop()
增加了灵活性为什么有用?这不会像以前一样消耗那么多的代码行吗?
在这种情况下 , 是的 。 但是一旦你处理稍微复杂的东西 , 它就会变得非常有用 。 这一次 , 您可以将所有装饰器(即上面的部分)移动到它自己的模块中 。 也就是说 , 您将它们写入一个名为的文件中 , 并将如下内容写入您的主文件中: def startstop()  decorators.py
原则上 , 您可以在不使用装饰器的情况下做到这一点 。 但这种方式让生活更轻松 , 因为您不必再处理嵌套函数和无休止的括号计数 。
您还可以嵌套装饰器:
请注意 , 我们尚未定义 , 但您将在下一节中看到它 。 它是一个函数 , 可以测量一个进程在 Python 中花费的时间 。  exectime()
这种嵌套相当于这样的一行: