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)
发布了32 篇原创文章 · 获赞 1 · 访问量 606
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览