登录  /  注册

深入解析Python--Currying函数

零到壹度
发布: 2018-04-19 16:08:47
原创
1997人浏览过

本文实例讲述了深入解析Python--Currying函数。分享给大家供大家参考,具体如下:

一,定义:

    1) 指的是将原来接受两个参数的函数变成新的接受一个参数的函数的过程。新的函数返回一个以原有第二个参数为参数的函数

    2)举例:将加法函数Currying:其方法就是通过嵌套把函数转化为Currying函数。

def add(x,y):
    return x + y
def add(x):
    def _add(y):
        return x + y
    return _add
登录后复制

二,应用:

需求:

一个加法函数,想增强它的功能,能够输出被调用过以及调用的参数信息。

def add(x,y):
    return x + y
登录后复制

现在我们增加信息输出功能

def add(x,y):
    print('call add,x + y')  #log output to the console
    return x + y
登录后复制

上面的加法函数虽然完成了需求,但有下面三个缺点:

1.打印语句的耦合度太高。

2.加法函数属于业务功能,而输出信息的功能能属于非业务功能代码,不该放在业务函数加法中。

那我们做出下面改进:

def add(x,y):
    return x + y
def logger(fn):
    print('begin')  #enhanced output
    x = fn(4,5)
    print('end')    #enhanced features
    return x
print(logger(add))
登录后复制

上面的改进做到了业务功能分离,但是fn函数调用传参是个问题。我们想要灵活的传入参数,但是参数却在内部函数里面,如何用灵活的语言python来解决这个问题呢?

def add(x,y):
    return x + y
def logger(fn):
    def _logger(*args,**kwargs):
        print('begin')
        c = fn(*args,**kwargs)
        print('end')
        return c
    return _logger
logger(add)(2,3)
登录后复制

现在,我们可以灵活的输入参数了

下面给出几个更具体的例子:

def ad1(m,n,*,l=909):
    return m + n + l
def loger(fn,*args,**kwargs):
    print('What\'s the matter?')
    ret = fn(*args,**kwargs)
    return ret
print(loger(ad1,2,3,l=4))   #Can you currying them?
登录后复制
def add(x,y,*,z=9):
    return x + y + z
def logger(fn,*args,**kwargs):
    print('This is a stupid function')
    ret = fn(*args,**kwargs)  #after collections it needs to be deconstructed
    return ret
print(logger(add,2,4,z=17))
登录后复制
def ad1(m,n,*,l=909):
    return m + n + l
def loger(fn):
    def _loger(*args,**kwargs):   #append a function as wrapper
        print('What\'s the matter?')    
        ret = fn(*args,**kwargs)   #the function which is be wrapped and transfer args and kwargs
        return ret
    return _loger
#print(loger(ad1)(2,3,l=4))  also okay
t = loger(ad1)  #defind the function loger
r = t(2,3,l=4)  # income parameters and transfer it
print(r)
登录后复制

   三,总结:

    Currying学习完毕之后会有python中最最重要的最最精髓的知识在等着我们--装饰器

相关推荐:

js函数柯里化

函数式中的Currying

JavaScript 函数的scope,currying

Currying

以上就是深入解析Python--Currying函数的详细内容,更多请关注php中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
相关标签:
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
关于CSS思维导图的课件在哪? 课件
凡人来自于2024-04-16 10:10:18
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号