柯里化

一、什么是柯里化

  柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。这个技术由 Christopher Strachey 以逻辑学家哈斯凯尔·加里命名的,尽管它是 Moses Schönfinkel 和 Gottlob Frege 发明的。

 

二、比喻柯里化

  比如说一间发廊,客人都是来剪头发的,但是可以实现不同的头型,发型师需要根据客户不同的需求以实现不同的发型,例如剪刀、吹风机、刮刀等工具都能实现不同的效果。(个人觉得挺像工厂模式的)

 

三、实现柯里化

  tips:下方用了ES6一些小知识点:箭头函数等。

 1 function isArray(arr) {
 2     return arr.constructor.toString() === "function Array() { [native code] }"
 3 }
 4 
 5 function multiply(...nums) {
 6     if(!isArray(nums)) {
 7         return ;
 8     }
 9 
10     return nums.reduce((prev, now) => prev * now) 
11 }
12 
13 //数字增加
14 function add(...nums) {
15     if(!isArray(nums)) {
16         return ;
17     }
18 
19     return nums.reduce((prev, now) => prev + now);
20 }
21 
22 // 函数柯里化
23 function curry(fn) {
24     var remain = Array.prototype.slice.call(arguments, 1) 
25     return function() {
26         var nowArs = Array.prototype.slice.call(arguments, 0);
27         var finalArs = nowArs.concat(remain)
28         return fn.apply([], finalArs)
29     }
30 }
31 
32 var addArr = curry(multiply, 2)
33 
34 var res = addArr(5, 5);
35 
36 console.log(res)

剪发店:curry函数  

工具:吹风机、剪刀、刮刀

效果:发型、胡子

 

流程:剪发店   =>   不同的工具(二次加工)    =>    产生不同的效果

 

四、总结

  柯里化总而言之是一种思想,实现的一种方式,更像一种不同的东西合作实现不同的效果。

 

 

尾注:如有错误,请在留言区指出您的疑问,谢谢!

对前端感兴趣的朋友,可以跟博主交个朋友?

博主QQ:790891601,备注上:博客园相遇使我们成长

 

 

  

转载于:https://www.cnblogs.com/Salted-fish-without-dreams1/p/9459611.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
柯里化是一种函数式编程的概念,它指的是将一个接受多个参数的函数转化为一系列只接受单个参数的函数的过程。在Python中,可以通过使用闭包或者装饰器来实现柯里化。 闭包是指在一个内部函数中引用了外部函数的变量,并且该内部函数可以在外部函数调用结束后继续访问这些变量。通过使用闭包,我们可以实现柯里化。下面是一个使用闭包实现柯里化的示例: ```python def add(x): def inner(y): return x + y return inner add_5 = add(5) print(add_5(3)) # 输出 8 ``` 在上面的例子中,`add` 函数接受一个参数 `x`,并返回一个内部函数 `inner`。内部函数 `inner` 接受参数 `y`,并返回 `x + y` 的结果。通过调用 `add(5)`,我们得到了一个新的函数 `add_5`,它只需要一个参数 `y`,并且会将 `x` 固定为 5。这样,我们就实现了柯里化。 除了使用闭包,还可以使用装饰器来实现柯里化。下面是一个使用装饰器实现柯里化的示例: ```python def curry(func): def inner(*args): if len(args) >= func.__code__.co_argcount: return func(*args) return inner return inner @curry def add(x, y): return x + y add_5 = add(5) print(add_5(3)) # 输出 8 ``` 在上面的例子中,我们定义了一个装饰器 `curry`,它接受一个函数 `func` 作为参数,并返回一个新的函数 `inner`。新的函数 `inner` 接受任意数量的参数 `args`,如果参数个数足够,则调用原始函数 `func` 并返回结果;否则,返回自身。通过在 `add` 函数上应用装饰器 `@curry`,我们实现了柯里化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值