[TOC]
简介:
装饰器:在不更改原函数代码的前提下,增加原函数功能(个人理解如同小游戏金手指)
示例一:
def ceshiStrong(a):
# 第三步 : 如果第二步没有参数,则 a 为被装饰函数ceshiFn,
# 反之如果有参数,则 a 为穿过来的参数,并且在内层必须在嵌套一层函数
#
return a
@ceshiStrong
# 第二步 :1、 执行ceshiStrong函数,如果有参数{如@ceshiStrong('参数')},就传参数
# 2、如果没有参数(如@ceshiStrong),默认自动传被装饰的函数(ceshiFn)
# 进入第三步
def ceshiFn():
print('我是原函数')
ceshiFn() # 打印 : 我是原函数
# 第一步 :当调用原函数 ceshiFn时,因为被ceshiStrong函数装饰,所以先执行ceshiStrong函数进入第二步
#示例二:
这里设置一个场景,原函数需要参数,且采用带参装饰器
原函数功能 :对传进来的两个参数求和; 装饰器增加功能:对和除2,并加上汉字水印
def ceshiStrongFn(a): # 由于第二步有参数,所以 a = '我是装饰器参数',而原函数也传进来,所以还需要一个内层函数接收
print(a) # 我是装饰器参数
def ceshiOuter(fn): # 接收原函数
print(fn) # 打印 <function ceshi at 0x00000000021DF268>
def ceshiInner(x, y): #接收原函数的参数
print(x) # 2
return a + '%d'%(int(fn(x, y)/2))
return ceshiInner
return ceshiOuter
@ceshiStrongFn('我是装饰器参数') # 第二步
def ceshi(x, y):
return x + y
print(ceshi(2, 2)) # 第一步
# 打印结果 我是增强器参数2
网友评论