Python函数浅析(三)——柯里化装饰器

装饰器是学Python的必须路程,是非常重要的一点!那什么是柯里化装饰器,什么又是柯里化呢!
柯里化就是将原来接收两个参数的函数变成接收一个参数的函数的过程,新的函数返回一个以原来第二个参数为参数的函数!似乎与返回函数有点类似(⊙o⊙)…

在学装饰器之前最好先学完返回函数和高阶函数!

装饰器顾名思义就是具有包装的作用,在Python中装饰器就是对一个既定的函数功能进行包装,增添新的功能,但是不能在其内部进行修改,不改动源代码,只能在其外部进行包装!好比一幅画对其进行装饰,但是我们只能给他装裱,不能对其修改画的内容,这就是Python中的装饰器的作用!

def show():
    print('xmc') #定义一个函数,显示 xmc 

def logger(m):  #定义一个函数来接收一个参数
    def wrapper():  #这个函数是用来包装我们需要装饰的函数
    #在这里可以进行装饰(前)
        ret = m()   #原有函数的执行,一定不能改动
    #在这里可以装饰 (后)
        return ret
    return wrapper #返回一个函数,调用wrapper包装函数
n = logger(show) #这一部分可见返回函数浅析
print(n())   #xmc

上面的代码比较少,介绍了装饰器的基本构成,下面来个大的,详细的解析!

import time
import datetime

def logger(m):
    def wrapper(*args, **kwargs): #当logger接收参数后返回了wrapper函数,此时也就是开始调用wrapper函数,当传入的数时可变时我们使用以上类型!参数结构知识,可以在上篇博客了解!
        print("args={},kwargs={}".format(args,kwargs)) #字符串知识,打印参数列表
        start = datetime.datetime.now() #计时函数,也是装饰内容
        ret = m(*args, **kwargs)  #原函数执行
        delay = (datetime.datetime.now()-start).total_seconds()  #计时
        if delay > 3:
            print("{} take {}s.".format(m.__name__,delay)) #判断,也就是装饰内容
        return ret
    return wrapper #返回函数

@logger       
#相当于add=logger(add) add被覆盖了,指向包装wrapper函数
def add(x,y):
    time.sleep(3)
    return x + y  #实现函数加法功能!

print(add(x=1,y=2))

装饰器就是拓展原有功能,不改变源代码的一种方式!

猜你喜欢

转载自blog.csdn.net/qq_36501027/article/details/80733126
今日推荐