美文网首页PYTHON基础
16.高阶函数和柯里化

16.高阶函数和柯里化

作者: Stone_説 | 来源:发表于2020-12-22 00:42 被阅读0次

1.高阶函数

参数或者返回值为函数的含函数,称之为其高阶函数

1.1 例1
>>> def counter(base):
...     def inc(step=1):
...             nonlocal base
...             base += step
...             return base
...     return inc    #表示符是一个局部变量,每次都需要创建一次
>>> c1 = counter(10)
>>> c2 = counter(10)
>>> c1() == c2()
True
>>> c1() == c2()
True
>>> c1(),c2()
(13, 13)
>>> counter(10) == counter(10)
False
>>> counter(10)  #counter(10)返回的是一个内部函数,不过并不是同一个函数
<function counter.<locals>.inc at 0x7f10607ce9d0>
>>> counter(10)
<function counter.<locals>.inc at 0x7f10607ce940>
>>> c1 == c2
False
>>> c1 is c2
False
>>> id(counter(10)),id(counter(10))  #仅仅是地址复用,使用完地址被释放
(139708315003200, 139708315003200)
>>> c1,id(c1)  #用变量记录两个不同的函数对象时候,则不会释放,故地址不一样
(<function counter.<locals>.inc at 0x7f10607ce820>, 139708315002912)
>>> c2,id(c2)
(<function counter.<locals>.inc at 0x7f10607ce8b0>, 139708315003056)
1.2 例2
>>> def inc(step=1):   #外部的全局变量,地址没用变化过,始终如一
...     return 1
>>> def counter(base):    #此处返回的是一个函数
...     return inc
>>> print(inc,id(inc))
<function inc at 0x7f238e369790> 139790686525328
>>> c1 = counter(10)
>>> c1
<function inc at 0x7f238e369790>
>>> c2 = counter(10)
>>> c2
<function inc at 0x7f238e369790>
>>> c1 == c2 ,c1 is c2
(True, True)

2.柯里化

将原来接受两个参数变成新的接受一个参数的函数的过程。新的函数返回一个以原有第二个参数为参数的函数
z=f(x,y) --> z=f(x)(y)的形式

>>> def add(x,y):
...     return x+y
... 
>>> add(4,5)
9
>>> def add1(x):
...     def foo(y):
...             return x+y
...     return foo
>>> fn = add1(100)
>>> fn(100)
200

练习1:add(x,y,z) --> add(x)(y,z)

>>> def add(x):
...     def foo(y,z):
...             return x+y+z
...     return foo
>>> a = add(5)
>>> a(4,5)
14

练习2:add(x,y,z) --> add(x)(y)(z)

>>> def add(x):
...     def foo1(y):
...             def foo2(z):
...                     return x+y+z
...             return foo2
...     return foo1
>>> s = add(3)
>>> s(4)(10)
17

练习3:add(x,y,z) --> add(x,y)(z)

>>> def add(x,y):
...     def foo(z):
...             return x+y+z
...     return foo
>>> s = add(2,5)
>>> s(10)
17

相关文章

  • React基础篇之高阶函数&函数柯里化

    高阶函数 函数柯里化

  • 16.高阶函数和柯里化

    1.高阶函数 参数或者返回值为函数的含函数,称之为其高阶函数 1.1 例1 1.2 例2 2.柯里化 将原来接受两...

  • 初学函数式编程

    高阶函数(Higher-Order Function):高阶函数就是把函数作为参数的函数。 柯里化(Curryin...

  • JS函数柯里化

    在正式聊函数柯里化之前,我这里给大家补充下高阶函数的概念和应用: 1.1、什么是高阶函数?高阶函数英文叫 High...

  • javascript-柯里化2018-08-08

    柯里化 / 高阶函数 柯里化:将 f(x,y) 变成 f(x=1)(y) 或 f(y=1)x 重点!!!柯里化可以...

  • 06 高阶函数

    所谓高阶函数,就是将函数对象作为函数的参数或者函数的返回值,高阶函数是抽象必不可少的工具 柯里化和部分函数 函数其...

  • 柯里化、高阶函数、

    柯里化 高阶函数在数学和计算机科学中,高阶函数是至少满足下列一个条件的函数:**接受一个或多个函数作为输入:for...

  • 柯里化,高阶函数

    柯里化Currying: 柯里化:多参数函数变成接受单一参数并将【接受余下参数且返回结果的】新函数返回的技术。 柯...

  • curried function

    柯里化 haskell 趣学指南中在高阶函数这一章中提出了柯里化概念。举例max函数首先看max函数的类型 按照以...

  • Swift函数式编程与面向协议编程

    函数式编程(FP) 一、函数式编程(FP)-高阶函数 二、函数式编程(FP) - 柯里化(Currying) 三、...

网友评论

    本文标题:16.高阶函数和柯里化

    本文链接:https://www.haomeiwen.com/subject/vircnktx.html