关于Python之路:Python之路day14装饰器多层装饰器

前言时刻明天学习了装璜器的用法,很早之前就学习过…… 来来总结一波: 明天次要就学习了装璜器的作用以及用法 装璜器很重要,倡议弄懂。 1、装璜器概念装璜器顾名思义就是对一个函数装璜一下扩大一个性能,而不扭转其函数外部的代码,去掉装璜器不影响原函数的性能,加上就可扩大一个性能。例如:能够把装璜器比作化妆品,化妆品能够使人脸的变得更加难看,然而擦掉化妆品,脸还是脸。只是应用化妆品装璜了下你的脸变得难看了,丝毫没有扭转脸的属性。 有人说装璜器有啥用呢?装璜器完满的合乎了代码凋谢关闭准则。 什么是代码凋谢关闭准则? 封闭性:对批改是关闭的,扩大的代码状况下,不能批改原函数的代码开放性:容许对曾经设计好的代码进行扩大性能。试想一个场景,明天过节气,老板让你给网站扩大一个充1送一流动性能,你的做法是硬扩、软扩、还是智扩?听我细细道来 def charge_money(pay_sum): print(f"充值到账:{pay_sum} 元") return True# 1、做流动之前charge_money(666)# 曾经充值了:666 元1)硬扩: def charge_money(pay_sum): print(f"流动赠送了:{pay_sum} 元") pay_sum = pay_sum * 2 print(f"充值到账:{pay_sum} 元") return True# 2、做流动 硬扩charge_money(666)# 流动赠送了:666 元# 充值到账:1332 元这里有个问题,那就是更改了原函数的内容,不合乎封闭性准则。 2)软扩: # 3、软扩def salse_activity(pay_sum): print(f"流动赠送了:{pay_sum} 元") # 此处省去代码:更新数据库的用户金额 return True def charge_money(pay_sum): print(f"充值到账:{pay_sum} 元") # 此处省去代码:更新数据库的用户金额 return Truesalse_activity(666)charge_money(666)# 流动赠送了:666 元# 充值到账:666 元软扩是在原根底上新增加了一个函数,相当于是扩大了一个性能。然而又有一个问题了,如果你同时在若干 n 个充值函数都增加充一送一流动,那么就须要写 n 次 salse_activity(666) ,那就很不美观。那么有请明天的配角装璜器,闪亮退场。 3)智扩: # 智扩 装璜器def salse_activity(func): """其实就是闭包""" def inner(pay_sum): print(f"流动赠送了:{pay_sum} 元") # 此处省去代码:更新数据库的用户金额 res = func(pay_sum) return res return inner def charge_money(pay_sum): print(f"充值到账:{pay_sum} 元") # 此处省去代码:更新数据库的用户金额 return Truecharge_money = salse_activity(charge_money)charge_money(666)# 流动赠送了:666 元# 充值到账:666 元应用 Python 的装璜器语法糖变形有: ...

May 11, 2021 · 2 min · jiezi