当前位置:首页 > Python技术文章 > 深入解析Python--Currying函数

Python Currying函数实例用法

  • 发布时间:
  • 作者:码农之家原创
  • 点击:111

这篇文章主要知识点是关于Python、Currying、的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

精通Python网络爬虫
  • 类型:Python爬虫大小:108.6 MB格式:PDF作者:韦玮
立即下载

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

以上就是本次给大家分享的关于java的全部知识点内容总结,大家还可以在下方相关文章里找到相关文章进一步学习,感谢大家的阅读和支持。

推荐内容

python当前时间格式化代码

JS使用setInterval实现计时器功能

centOS 7安装mysql 5.7的步骤

mysql解压缩方式安装和彻底删除的方法

Python重命名多个文件的实例方法

展开 +

收起 -

python 相关电子书
学习笔记
网友NO.626127

详解JS中的柯里化(currying)

何为Curry化/柯里化? curry化来源与数学家 Haskell Curry的名字 (编程语言 Haskell也是以他的名字命名)。 柯里化通常也称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果。 因此柯里化的过程是逐步传参,逐步缩小函数的适用范围,逐步求解的过程。 柯里化一个求和函数 按照分步求值,我们看一个简单的例子 var concat3Words = function (a, b, c) { return a+b+c;};var concat3WordsCurrying = function(a) { return function (b) { return function (c) { return a+b+c; }; };};console.log(concat3Words("foo ","bar ","baza")); // foo bar bazaconsole.log(concat3WordsCurrying("foo ")); // [Function]console.log(concat3WordsCurrying("foo ")("bar ")("baza")); // foo bar baza 可以看到, concat3WordsCurrying("foo ") 是一个 Functi……

网友NO.775721

浅谈JS中的反柯里化( uncurrying)

反柯里化 相反,反柯里化的作用在与扩大函数的适用性,使本来作为特定对象所拥有的功能的函数可以被任意对象所用. 即把如下给定的函数签名, obj.func(arg1, arg2) 转化成一个函数形式,签名如下: func(obj, arg1, arg2) 这就是 反柯里化的形式化描述。 例如,下面的一个简单实现: Function.prototype.uncurrying = function() { var that = this; return function() { return Function.prototype.call.apply(that, arguments); }};function sayHi () { return "Hello " + this.value +" "+[].slice.call(arguments);}var sayHiuncurrying=sayHi.uncurrying();console.log(sayHiuncurrying({value:'world'},"hahaha")); 解释: uncurrying是定义在Function的prototype上的方法,因此对所有的函数都可以使用此方法。调用时候:sayHiuncurrying=sayHi.uncurrying(),所以uncurrying中的 this 指向的是 sayHi 函数; (一般原型方法中的 this 不是指向原型对象prototype,而是指向调用对象……

<
1
>

电子书 编程教程 文档 软件 源码 视频

Copyright 2018-2020 xz577.com 码农之家

本站所有电子书资源不再提供下载地址,只分享来路

免责声明:网站所有作品均由会员网上搜集共同更新,仅供读者预览及学习交流使用,下载后请24小时内删除

版权投诉 / 书籍推广 / 赞助:QQ:520161757