如何在不改变代码情况下用装饰器实 现?(语言-python)

ASWEDRFGTYHUJHYGFDFGHYUJHGFCDFVGHGBVFCFVGBHNJM

img

用装饰器语法装饰sum_num函数即可,仅供参考:

参考链接:
无惧面试,带你搞懂python装饰器(工作面试必读) - 知乎
Python【修饰器/装饰器】专题,不动已有代码,增加新功能的好方法!_退休的龙叔的博客-CSDN博客_python装饰器和修饰器
https://www.jb51.net/article/241938.htm



#https://blog.csdn.net/zhiguigu/article/details/120761323
def warpSum_num(sum_num):
  #https://www.jb51.net/article/241938.htm
  #https://zhuanlan.zhihu.com/p/470616874
  
    def inner(*args, **kwargs):  # # inner添加了参数,args 是个元组 kwargs 是字典
    #使用sum_num函数的传递的两个参数args[0]和args[1]
        print(str(args[0]),"+",str(args[1]),"=",str(args[0]+args[1])) 
        #返回调用sum_num()函数的返回值
        return sum_num(*args, **kwargs)
        
    return inner
        
@warpSum_num  #sum_num函数使用装饰器warpSum_num
   
def sum_num(num1 , num2):
    return num1+num2    

ret = sum_num(1,2)
print(ret)    

img


def print_step(fn):
    def warpFn(a, b):
        resNum = fn(a, b)
        print('{}+{}={}'.format(a, b, resNum))
        print(resNum)
    return warpFn


@print_step
def sum_int(n1, n2):
    return n1+n2

def x(s):
    def y(a,b):
        c = s(a,b)
        print(f'{a}+{b}={c}')
        return c
    return y

@x
def s(a,b):
    return a+b

r = s(1,2)
print(r)