本文摘自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》频道 >>
人民邮电出版社
python入门书籍,非常畅销,超高好评,python官方公认好书。
转载请注明出处:木庄网络博客 » 深入解析Python--Currying函数