python基础 ---高阶函数和柯里化

文章目录

本文主要介绍高阶函数以及函数柯里化的概念,顺便举几个例子

高阶函数
High-order function:
数学表达式:y = f(g(x))  
条件:接受一个或多个函数作为参数,或者有输出函数的都叫高阶函数

函数运行后就消亡,但是有了赋值操作后,函数对象不会被释放,只要变量x还在,那么函数就可以继续运行

def counter(base): #形参就是本地变量,因此base就是本地变量
	def inc(step=1):
		#nonlocal base  ##此语句不定义也可以,因为inc函数已经形成了闭包
		base += step
		return base
	return inc

x = counter(100) #将counter函数运行并且赋值给x
x()    #这个会返回结果
#多次单独运行x()可以不断累加,因为counter返回的函数对象已经被x记住,base变量的值也会随着运算的进行不断更新


y1 = counter(5) 
y2 = counter(5)
print(y1 == y2) #False
print(y1 is y2) #False
print(y1() == y2()) #True
#这两次分别运行互不干扰,前两次返回的是函数地址,第三次返回的是运行的结果

可以得出结论:高阶函数在有函数输出时,高阶函数的每次运行都会返回互不相同的函数对象,如果使用变量记住这些函数对象,那么就可以通过x()的形式来运行内部的嵌套函数,可多次运行

柯里化

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

即 y = f(x, y)  --> y = g(x)(y)
def add(x, y):
	return x + y

def add(x):  
	def add2(y):
		return x + y
	return add2

add(4, 5)
add1(4)(5) #这两次运行的结果是一样的	

再举个栗子

def sub(x, y):
    def add(z):
        return x - y + z
    return add
#这次要进行的是 sub(x, y)(z)  --> sub2(x)(y)(z)

def sub2(x):
    def sub3(y):
        def add2(z):
            return x - y + z
        return add2
    return sub3

sub(10,4)(3) 
sub2(10)(4)(3)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值