深入解析Python--Currying函数


本文摘自php中文网,作者零到壹度,侵删。

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

一,定义:

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

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

1

2

3

4

5

6

def add(x,y):

    return x + y

def add(x):

    def _add(y):

        return x + y

    return _add

二,应用:

需求:

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

1

2

def add(x,y):

    return x + y

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

1

2

3

def add(x,y):

    print('call add,x + y')  #log output to the console

    return x + y

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

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

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

那我们做出下面改进:

1

2

3

4

5

6

7

8

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来解决这个问题呢?

1

2

3

4

5

6

7

8

9

10

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)

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

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

1

2

3

4

5

6

7

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?

1

2

3

4

5

6

7

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))

1

2

3

4

5

6

7

8

9

10

11

12

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输出2到100之间的素数

Python怎么安装第三方库?

两个Python实现切换功能

关于Python中如何使用selenium模拟jquery滑动解锁的实例分析

爬虫能获取什么样的数据和具体的解析方式

Python怎么输出表格

windows下Python安装paramiko模块和pycrypto模块

Python怎么分析数据

使用Python监控文件内容变化代码

Python的format什么意思

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...