当前位置:主页 > python教程 > 深入解析Python--Currying函数

Python Currying函数实例用法

发布:2020-02-07 10:24:22 111


给大家整理一篇python相关的编程文章,网友富星宇根据主题投稿了本篇教程内容,涉及到Python、Currying、深入解析Python--Currying函数相关内容,已被671网友关注,内容中涉及的知识点可以在下方直接下载获取。

深入解析Python--Currying函数

本文实例讲述了深入解析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函数的详细内容,更多请关注码农之家其它相关文章!


参考资料

相关文章

  • python是c语言开发的吗

    python是c语言开发的吗

    发布:2022-07-07

    给网友们整理关于python的教程,python是c语言开发的。Python本身被设计为可扩展的,并非所有的特性和功能都集成到语言核心,Python提供了丰富的API和工具,以便程序员能够轻松地使用C、C++、Cython来编写扩展模块。


  • python em算法的实现

    发布:2021-05-18

    这篇文章主要介绍了python em算法的实现,帮助大家更好的理解机器学习,感兴趣的朋友可以了解下


  • 基于Python实现成语填空游戏的示例代码

    发布:2023-04-07

    成语填空想必大家都是十分熟悉的了,特别是有在上小学的家长肯定都有十分深刻的印象。当然了你也别小看了成语调控小游戏,有的时候知识储备不够,你还真的不一定猜得出来是什么。本文就来用Python编写一个简单的成语填空游戏,感兴趣的可以了解下


  • 解析Python正则表达式匹配字符串中的http链接

    发布:2020-03-13

    今天小编就为大家分享一篇Python 正则表达式匹配字符串中的http链接方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧


  • Python3中省略号(...)用法介绍

    发布:2023-04-10

    本文主要介绍了Python3中省略号(...)用法介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧


  • python中twisted实例用法

    发布:2020-01-20

    这篇文章主要介绍了python 编程之twisted详解及简单实例的相关资料,需要的朋友可以参考下


  • 详解Flask框架中Flask-Login模块的使用

    发布:2023-03-05

    Flask-Login 是一个 Flask 模块,可以为 Flask 应用程序提供用户登录功能。这篇文章将通过一些示例为大家介绍一下Flask-Login模块的使用,需要的可以参考一下


  • Python利用Diagrams绘制漂亮的系统架构图

    发布:2023-03-04

    Diagrams  是一个基于Python绘制云系统架构的模块,它能够通过非常简单的描述就能可视化架构。本文将利用它绘制漂亮的系统架构图,感兴趣的可以了解一下


网友讨论