什么是高阶函数?
一个函数的参数是否可以接受另外一个函数作为参数,这样的函数就叫做高阶函数。
最简单的高阶函数实例:
def func(x,y,z):
return z(x)+z(y)
print(func(-20,-10,abs))
返回函数
高阶函数除了可以接收函数参数之外,还可以把函数作为返回值
def func(*args):
def sum():
ax = 0
for n in args:
ax+=n
return ax
return sum
a = func(1,2,3,4,5,6)
print(a())
结果是:21
内部函数可以引用外部函数的参数和局部变量,当外部函数返回内部函数时,相关参数和变量都保存在返回的函数当中,这就是闭包。
当调用外部func函数的时候,每次调用都是返回一个新的的函数,即使传值是一致的,也会不一样。例子如下:
def func(*args):
def sum():
ax = 0
for n in args:
ax+=n
return ax
return sum
a1 = func(1,2,3,4,5,6)
a2 = func(1,2,3,4,5,6)
print(a1==a2)
结果返回是False。
但是如果print(a1()==a2())是True ,调用的值是一样的!
def count():
fs = []
for i in range(1,5):
def f():
return i*i*i
fs.append(f)
return fs
f1,f2,f3,f4 = count()
print(f1())
print(f2())
print(f3())
print(f4())
结果是:
64
64
64
64
--------------------------------------------------------------
def count():
def f(i):
def func():
return i*i
return func
fs = []
for var in range(1,5):
fs.append(f(var))
return fs
f1,f2,f3,f4 = count()
print(f1())
print(f2())
print(f3())
print(f4())
结果是:
1
4
9
16
划重点:返回函数不要应用任何循环变量,或者后面会发生改变的变量。