实用:python中高阶函数的柯里化和装饰器

本文介绍了Python中的高阶函数应用,重点探讨了柯里化和装饰器的概念。通过实例展示了如何将原本接受两个参数的函数转换为只接受一个参数的柯里化函数,并详细讲解了无参数和带参数装饰器的使用方法及其运行结果。

柯里化定义:将原来接收2个参数的函数变成新的接受1个参数的函数的过程
柯里化之前:

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

add(4,5)

柯里化之后:

def add(x):
    def _add(y):
        return x+y
    return _add

add(4)(5)

运行结果:

9

装饰器:(无参数)

def logger(fn):
    def _logger(*args,**kwargs):
        print('before')
        ret = fn(*args,**kwargs)
        print('after')
        return ret
    return _logger

# logger(add)(4,5)
# add = logger(add)
# add(4,5)

@logger    #@logger等价于add = logger(add),此处的add为@的下一行中第一个函数
def add(x,y):
    return x+y

add(4,5)

运行结果:

before
after
Out[7]:
9

装饰器:(带参数)

def copy_attributes(src):
    def wrapper(dst):
        dst.__name__ = src.__name__
        dst.__doc__ = src.__doc__
        return dst
    return wrapper

def logger(fn):
    @copy_attributes(fn)    #等价于:_logger = copy_attributes(fn)(_logger)  ==> _logger = wrapper(_logger) ==> _logger=dst
    def _logger(*args,**kwargs):
        '''
        this is a wrapper function
        '''
        print('before')
        ret = fn(*args,**kwargs)
        print('after')
        return ret
    return _logger

# logger(add)(4,5)
# add = logger(add)
# add(4,5)

@logger    #@logger等价于:add = logger(add),此处的add为@的下一行中第一个函数

def add(x,y):
    '''
    This is a function for  addtion
    :param x: int
    :param y: int
    :return: int
    '''
    return x+y

print(add(4,5))
print(add.__name__)
print(add.__doc__)

运行结果:

before
after
9
add

    This is a function for  addition
    :param x: int
    :param y: int
    :return: int
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值