理解Python装饰器

Python装饰器:简单来说,就是为一个函数增加新的功能。那出现Python装饰器的原因是什么呢?

举个例子:我们有一个加法函数Add_X_Y(x,y)

def Add_x_y(x,y):
    return x+y

然后,假如我们想为这个函数增加一条打印信息的语句,你会怎么做?

第一种方法:

def Add_x_y(x,y):
    print("This a func add x and y")
    return x+y
那么你想一下,这是不是已经改变了函数 Add_X_Y(x,y)


第二种方法:就是利用装饰器了            (注:这里没有使用 语法糖 @ 因为我觉得,不使用@更直观)

def Wrapper_fuc(fuc):
    def Wrapper():
        print("This a func add x and y")###增加的语句
        sumxy=fuc
        return sumxy
    return Wrapper
###解释一下,这两个return 的意思,
###第一个 return sumxy  是返回func的执行结果,在例子中就是Add_x_y(x,y)
###第二个 return Wrapper 是返回里面的函数Wrapper,因为你最终是要返回func的执行结果
###Wrapper 是调用了func,所以,你需要返回Wrapper才能返回func的执行结果
def Add_x_y(x,y):  
	return x+y
New_Add_x_y=Wrapper_fuc(Add_x_y(1,2))##新函数
xy=New_Add_x_y()
print("New_Add_x_y() x+y=",xy)
print("Add_x_y()   x+y=",Add_x_y(1,2))##旧函数


执行结果:



看,现在是不是在没有改变Add_X_Y(x,y)的情况下,产生了一个新的函数New_Add_x_y(),这就相当于为Add_X_Y(x,y)增加了新的功能了。


那么,我们为什么能够使用Python装饰器呢?原因有一下四点:

1)函数也是对象,函数也可以赋值给其他变量

def message():
    print("hello,world")
my_message=message
my_message()
2)函数可以嵌套,定义在另外一个函数内部

def Out_fuc():
    print("out out ")
    def Inner_fuc():
        print("inner inner")
    Inner_fuc()

Out_fuc()
3)函数可以作为参数返回

def fuc1():
    def func2():
        print("print func2")
    return func2
fuc3=fuc1()
fuc3()
4)函数可以作为参数传入

def fuc1(fuc3):
    fuc3()
def func2():
    print("print func2")
    
fuc1(func2)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CoLiuRs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值