最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

深入解析Python--Currying函数

来源:动视网 责编:小采 时间:2020-11-27 14:22:02
文档

深入解析Python--Currying函数

深入解析Python--Currying函数:本文实例讲述了深入解析Python--Currying函数。分享给大家供大家参考,具体如下:一,定义: 1) 指的是将原来接受两个参数的函数变成新的接受一个参数的函数的过程。新的函数返回一个以原有第二个参数为参数的函数 2)举例:将加法函数Currying:其
推荐度:
导读深入解析Python--Currying函数:本文实例讲述了深入解析Python--Currying函数。分享给大家供大家参考,具体如下:一,定义: 1) 指的是将原来接受两个参数的函数变成新的接受一个参数的函数的过程。新的函数返回一个以原有第二个参数为参数的函数 2)举例:将加法函数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中最最重要的最最精髓的知识在等着我们--装饰器。

相关推荐:

文档

深入解析Python--Currying函数

深入解析Python--Currying函数:本文实例讲述了深入解析Python--Currying函数。分享给大家供大家参考,具体如下:一,定义: 1) 指的是将原来接受两个参数的函数变成新的接受一个参数的函数的过程。新的函数返回一个以原有第二个参数为参数的函数 2)举例:将加法函数Currying:其
推荐度:
标签: 理解 函数 分析
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top