导航:首页 > 编程语言 > python装饰器理解

python装饰器理解

发布时间:2022-09-26 22:44:08

python装饰器是什么意思

装饰器是程序开发中经常会用到的一个功能,用好了装饰器,开发效率如虎添翼,所以这也是Python面试中必问的问题,但对于好多小白来讲,这个功能 有点绕,自学时直接绕过去了,然后面试问到了就挂了,因为装饰器是程序开发的基础知识,这个都 不会,别跟人家说你会Python, 看了下面的文章,保证你学会装饰器。

1、先明白这段代码

####第一波####

deffoo():

print'foo'

foo#表示是函数

foo()#表示执行foo函数

####第二波####

deffoo():

print'foo'

foo=lambdax:x+1

foo()#执行下面的lambda表达式,而不再是原来的foo函数,因为函数foo被重新定义了

2、需求来了

初创公司有N个业务部门,1个基础平台部门,基础平台负责提供底层的功能,如:数据库操作、redis调用、监控API等功能。业务部门使用基础功能时,只需调用基础平台提供的功能即可。如下:

###############基础平台提供的功能如下###############

deff1():

print'f1'

deff2():

print'f2'

deff3():

print'f3'

deff4():

print'f4'

###############业务部门A调用基础平台提供的功能###############

f1()

f2()

f3()

f4()

###############业务部门B调用基础平台提供的功能###############

f1()

f2()

f3()

f4()

目前公司有条不紊的进行着,但是,以前基础平台的开发人员在写代码时候没有关注验证相关的问题,即:基础平台的提供的功能可以被任何人使用。现在需要对基础平台的所有功能进行重构,为平台提供的所有功能添加验证机制,即:执行功能前,先进行验证。

老大把工作交给 Low B,他是这么做的:

跟每个业务部门交涉,每个业务部门自己写代码,调用基础平台的功能之前先验证。诶,这样一来基础平台就不需要做任何修改了。

当天Low B 被开除了…

老大把工作交给 Low BB,他是这么做的:

###############基础平台提供的功能如下###############

deff1():

#验证1

#验证2

#验证3

print'f1'

deff2():

#验证1

#验证2

#验证3

print'f2'

deff3():

#验证1

#验证2

#验证3

print'f3'

deff4():

#验证1

#验证2

#验证3

print'f4'

###############业务部门不变###############

###业务部门A调用基础平台提供的功能###

f1()

f2()

f3()

f4()

###业务部门B调用基础平台提供的功能###

f1()

f2()

f3()

f4()

过了一周 Low BB 被开除了…

老大把工作交给 Low BBB,他是这么做的:

只对基础平台的代码进行重构,其他业务部门无需做任何修改

###############基础平台提供的功能如下###############

defcheck_login():

#验证1

#验证2

#验证3

pass

deff1():

check_login()

print'f1'

deff2():

check_login()

print'f2'

deff3():

check_login()

print'f3'

deff4():

check_login()

print'f4'

老大看了下Low BBB 的实现,嘴角漏出了一丝的欣慰的笑,语重心长的跟Low BBB聊了个天:

老大说:

写代码要遵循开发封闭原则,虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展,即:

② python装饰器的作用和功能

装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能

③ 什么是Python装饰器


所谓装饰器就是把函数包装一下,为函数添加一些附加功能,装饰器就是一个函数,参数为被包装的函数,返回包装后的函数:你可以试下:

defd(fp):
def_d(*arg,**karg):
print"dosthbeforefp.."
r=fp(*arg,**karg)
print"dosthafterfp.."
returnr
return_d
@d
deff():
print"callf"
#上面使用@d来表示装饰器和下面是一个意思
#f=d(f)
f()#调用f



④ 如何理解Python装饰器

装饰器是一个函数,下记为函数A。函数A的返回值是

当你调用了一个被装饰器A装饰的函数B时,会将函数B作为变量传入函数A中。函数A最终会返回一个函数,记为函数C。在函数执行时会将变量传入函数C中执行并返回结果。

defa(func):
defc(*args,**kwargs):
print(args)
print(kwargs)
returnfunc(*args,**kwargs)
returnc

@a
defb(*args):
returnsum(args)

if__name__=='__main__':
print(b)
#<functiona.<locals>.cat0x021B7348>
#当你调用到函数b时,实际拿到的是将函数b作为参数放入a中执行后返回的函数c
print(b(*[iforiinrange(10)]))
#(0,1,2,3,4,5,6,7,8,9)
#{}
#45
#第一行是函数c打印args的结果
#第二行是函数c打印kwargs的结果
#第三行是最终print(c(0,1,2,3,4,5,6,7,8,9))的结果

⑤ 如何理解Python装饰器

首先要理解一点,函数也是一个对象,这个对象可以被赋值给变量,所以通过变量就可以调用函数,所以本质上,装饰器就是一个返回函数的高阶函数。

Python 装饰器主要用于在代码运行期间动态增加函数功能


⑥ 如何理解Python装饰器

简单的说 装饰器相当于 一种 hook方法,
当调用函数A时,实际上调用的是装饰器方法,装饰器再去调用函数A,
装饰器 可以在 调用函数A之前 和之后执行你要定义的代码
(比如1:在调用A之前,检查传递给A的参数是否合法,
比如2:检查A返回的数据是否合法
比如3:在调用A之前要执行一个新方法)
使用装饰器的好处就是 不需要修改函数A的代码 ,你就可以给函数A增加新功能

阅读全文

与python装饰器理解相关的资料

热点内容
怎么追程序员的女生 浏览:481
空调外压缩机电容 浏览:73
怎么将安卓变成win 浏览:455
手机文件管理在哪儿新建文件夹 浏览:721
加密ts视频怎么合并 浏览:773
php如何写app接口 浏览:800
宇宙的琴弦pdf 浏览:395
js项目提成计算器程序员 浏览:942
pdf光子 浏览:832
自拍软件文件夹名称大全 浏览:327
程序员留学移民 浏览:52
梁中间部位箍筋加密区 浏览:119
频谱分析pdf 浏览:752
乐2怎么升级安卓70 浏览:174
java中获取日期 浏览:508
单片机74hc245 浏览:274
美国历史上的总统pdf 浏览:753
程序员脱单实验室靠不靠谱 浏览:460
php中间四位手机号 浏览:871
永旺app怎么样了 浏览:518