学Python——装饰器,个人总结

[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) # 打印 
        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

个人观点,如有错误,不合理的地方,请指教

你可能感兴趣的:(学Python——装饰器,个人总结)