【Python 高级特性】装饰器:不修改代码,就能改变函数功能的强大特性

作者: Hucci写代码分类: 计算机技术 发布时间: 2024-03-23 15:18:08 浏览:41987 次

【Python 高级特性】装饰器:不修改代码,就能改变函数功能的强大特性

柚子柚子l:
装饰器就是定义比较抽象,用起来是真的爽…… 目前我在项目里面还没想到有用装饰器的场景,有谁能指教一下吗()感谢

【回复】我自己一般是用在这么几个点: 1:埋点上报 2:权限认证 3:做日志
【回复】我的经验更多是使用已经定义好的装饰器,比如 @property @staticmethod 还挺经常用的
【回复】fastapi?我是因为项目用到了这个,才开始关注的[笑哭]
芹菜吃伤了:
为什么 {f.__name__} 就是square这个函数名 我没看到import什么模块啊?

【回复】其实就是function类的变量__name__
【回复】回复 @芹菜吃伤了 :都有的,是python的特性
【回复】回复 @Hucci写代码 :噢 谢谢回复...魔法方法 是jupyter解释器特有的吗?我是个python初学者 我用的是pycharm
火炎焱燚淼淼淼淼:
这个视频真的好棒,讲得透彻又逻辑清晰,而且没有一点废话,整体节奏很完美,up加油啊 但有个地方我有疑问,测量函数时间的目的一般不是在函数运行超时的时候立刻结束函数吗,按这个装饰器的定义,也只是在函数超时运行结束后返回报错信息而已,这样不是没有意义了吗?举个例子就是把sleep里的时间换成10s,这个函数就需要运行10s才能给出超时的结果而不是0.2s

【回复】你的问题很好,这个示例主要是为了展示带有参数的装饰器怎么定义,实际意义略小,你说的需求可以在修改代码后满足
小猛男哟:
up可以详细讲一讲class类吗,有些场景新手有时候不知道什么时候def写个函数解决,什么时候写个class的方法解决

【回复】确实有这个计划,还在准备
【回复】其实都行,只是面向过程和面向对象的差异,用函数就拆步骤,把每个步骤打包成函数,再用,用类就把功能分步骤的同时分模块,某个模块负责这个功能中的某个部分。
【回复】回复 @Hucci写代码 :我也想听这个!催更催更[给心心][给心心]
宋分题a:
本期扩展版 给异步函数加个装饰器计时[思考]

bilimeng:
是否支持动态代理,这个看着与Java静态代理类似

【回复】python本就是动态语言,要实现动态代理有更轻松的方式。
CommandNotFound:
函数指针:我来py客串了[doge] 不过从应用来看,函数指针能实现的东西比装饰器多多了,就是有点麻烦[doge][doge]

巨头菜:
我很菜 但我自己的理解是在函数a里插入函数b 函数a像三明治一样的两个面包片一样去包裹住函数b 这个a函数可以写函数b的前置条件和后置条件 比如处理一个excel文件需要打开和关闭一样?不知道对不对

【回复】你的理解是正确的,它可以用来处理打开关闭。但我们一般不用装饰器来处理打开关闭,python中有个上下文管理器可以更好地做这件事。
【回复】回复 @Hucci写代码 :假如我需要扩展b函数,b函数里面有一些变量。我如何在b外面,a里面使用呢?
【回复】回复 @铋锝氢 :我也很想知道[星星眼]
月伴明生:
先写个闭包示例,再讲装饰器会更好些。

【回复】回复 @Hucci写代码 :up,我想知道python里的闭包和离散数学里的闭包有啥异同啊?我个人感觉是表现形式不一样,但是作用都是补充一定的成分使得关系完整,比如离散数学中 补充一些元素使得关系具有自反性的自反闭包;或者python中补充一些外部元素使得函数功能完整,成为一个完整的“关系”,这样对不对啊?
【回复】确实,之后看看有没有时间补个闭包吧,装饰器作为高阶技巧需要的前置知识还是蛮多的
雷峰叔叔zxj:
可以讲讲魔术方法[打call] 有时候真的好用

梦兴丶:
假如装饰器写了个阻塞线程的功能,然后装饰了另一个阻塞线程的功能会怎么样?他们能并行还是加线程?

【回复】这绝对是阻塞啊,说的好听是装饰器,其实就是自己写了个函数去调用另外一个函数。c#里叫委托,,js里防抖就是类似这种思维写的,脚本语言要实现这种方法太简单了。
【回复】回复 @大韩塞拉斯 :我评论的第二天上班时试过了,阻塞了。上班写go写习惯了,还在习惯py的thread写法[笑哭]
【回复】用“@”语法糖进行装饰函数,装饰器会在程序启动时就被解释运行,也意味着程序启动时就被装饰器里的阻塞代码所阻塞
蒲公英田野:
天,宝藏up,已经推荐给好朋友了。好奇怪up打字为啥那么快,音频视频分开录的吗。这个ide是啥,感觉好强大

【回复】回复 @Hucci写代码 :是改键了吗[大哭]感觉你方向键和home end走的行云流水,正常布局好难做到。这都是次要的,主要是up口齿伶俐,表达的特别清晰到位一句废话都没有
【回复】单纯的手指灵活罢了哈哈,ide是vscode

程序员 Python高级特性 代码 Python Python基础 Python教程

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

更多相关阅读