那么, 让我们来谈谈装饰器的一些实际应用｡
我是说, 我们已经在课堂上见过他们了, 对吧？
我们看到了类方法和静态方法, 我们可以在类上创建类方法和静态方法, 直接类可以使用这些方法.
如果你不记得这些, 就回去看那些视频｡
但我想给你们看一个我最喜欢的装饰师的例子｡
我们要创造我们自己的｡
我们要做的是我想有一个表演｡
装饰器｡
顺便说一下, Python中没有这个装饰器｡
我们要从头开始建造它｡
我想做的是能够有一个性能装饰器, 我可以在测试我的代码时使用它来查看我的代码运行得有多快｡
例如, 如果我有一个函数, 假设需要很长时间｡
嗯, 好长时间才能完成｡
所以我会做一个很长的循环, 比如说, I在的范围内｡
所有这些数字, 我将做一个随机的计算, 乘以5.
这个功能｡
我想知道它的性能如何, 完成这个需要多少毫秒｡
那我们该怎么带呢？
首先, 我将介绍一些我们还没有讲过的内容, 我们将介绍一些关于模块和内置模块的内容｡
现在, 我们不打算过多讨论这个, 但是我们要从时间模块中导入一个叫做井时间的东西｡
我们会在本课程的模块部分讨论这个问题｡
我实际上是在说, 当我安装Python或者在我的例子中当我使用这个涟漪的时候, 如果我请求它的话,
它就可以访问这个时间｡
在这个例子中, 我说, 嘿, 我想使用这个时间对象或者模块, 我从Python中得到的｡
在这里, 我们将按照我们学过的模式创建装饰器｡
我要说的是定义性能｡
性能函数会接受一个函数, 就像我们之前看到的那样｡
在这里, 我们有包装纸｡
比如说包装函数和包装函数｡
如果你还记得的话, 它将是灵活的, 通过采取星星和星, 星关键字弧｡
这样我们就可以传递任意多个参数, 因为我们不知道这个函数, 有多少个参数.
而且我希望能够在我的所有功能上使用性能｡
首先, 我们要得到函数的结果.
成为｡
我们在这里得到的函数, 然后简单地说｡
使用星星参数和star star关键字弧运行函数｡
最后, 在这篇文章的最后, 我想返回结果｡
最后我们要把说唱歌手还回去｡
所以没什么是我们没见过的｡
我本可以在这里直接返回或者直接运行这个函数, 但是我马上会告诉你为什么我会这样做｡
现在, 我们的函数实际上什么也不做｡
如果我单击“运行”｡
好吧, 如果我做了很长时间, 运行这个函数, 什么都不会发生｡
只是花了很长时间才跑完｡
但仅此而已｡
什么也没发生｡
这是我们让事情变得有趣的时候｡
我们要计算从开始运行这个函数到结束运行这个函数的时间, 我们可以使用时间模块来完成这个工作｡
我可以创建一个可变的时间一开始, 简单地说时间｡
所以我运行这个时间函数, 它将开始｡
一个时间, 然后说, 嘿, 这个最初的时间将是PT一｡
在这个函数之后, 我们的主函数, longtime, 开始运行｡
我会说第二句, 然后说, 嘿, 几点了？
现在就去
所以这次我们来看看现在几点了｡
然后我们运行这个函数, 这次它会检查时间｡
这两者之间的区别在于这部分花了多长时间｡
好吧, 我知道了
所以我们要做的就是打印一个F字符串, 用了T1减去T2｡
好吧, 我知道了
这实际上以毫秒为单位返回｡
所以我就用GM来表示毫秒｡
就是这样｡
我已经用这个额外的时间段包装了我的函数, 然后我会在运行函数时立即打印它所用的时间｡
让我们来看看｡
如果我现在在这里运行长时间函数, 然后单击“运行”｡
好吧, 我得到一个负数, 因为我搞砸了｡
这应该是t2减去rt1, 因为RT1的时间过去了一段时间, 然后是TT2｡
所以TT 2总是大于TW 1｡
如果我运行这个｡
好吧, 我会的
它花了0｡ 16毫秒｡
我觉得这其实是秒｡
现在, 让我们将这个长函数设置得更长一些, 这样, 单击“运行”｡
哦, 天哪｡
这花了1｡ 九秒｡
如果我单击“运行”使其更长, 会怎样？
这是我一直在说的部分, 直到函数运行, 因为会有一个尴尬的沉默｡
否则, 希望这很快结束, 因为我没有其他可谈的｡
来吧, 来吧
这是越来越尴尬｡
好吧, 来吧｡
哦, 天哪｡
嗯嗯嗯
我快进一下｡
哦, 天哪｡
19秒｡
那是｡
这是相当糟糕的｡
但是我现在有了这个装饰器, 我可以给予我的程序中的几乎任何函数, 并且实际上测量我的函数的性能｡
挺有用的, 对吧？
我可以有这段代码, 在部署我的代码之前, 或者把我的代码放到世界上｡
我可以测试我的函数的性能, 也许我可以用不同的方式优化东西｡
非常非常有用｡
我只用了几行代码就做到了｡
九行代码｡
现在, 请注意, 这个性能装饰器取决于计算机以及计算机上的CPU和内存的速度｡
所以我花了19秒的时间可能会花你更多或更少的时间, 这取决于你的机器｡
但是这是一个比较函数的好方法, 我希望在这之后你能看到装饰器的力量｡
装饰器在Python库和框架中使用得很多｡
我们将要讨论的是框架, 比如Django和Flask使用装饰器.
也许你想有一些身份验证装饰器, 所以你验证它, 每个函数只能运行,
如果用户是身份验证, 也许他们是｡
他们拥有运行某项功能（如登录网站）的权限｡
或者, 您可能只需要登录或日志记录｡
装饰器, 它只记录并让你的数据库知道, 嘿, 有人登录了你的系统, 或者嘿,
有人从亚马逊购买了东西｡
或者有人刚申请了加为好友.
有这么多的用途装饰和装饰是一个很难的话题｡
你不会在python代码中看到它们｡
它们只是一个额外的特性, 当你对Python越来越熟悉的时候, 你可以使用它们｡
但我希望在这一切结束时, 你将至少理解他们, 也许有一天建立自己的或使用预先建立的库和框架｡
下次见｡
再见, 再见, 再见