高阶函数:把函数作为参数传入,这样的函数成为高阶函数。
高阶函数,higher-order function
Abs()内置函数:绝对值
函数名是什么:指向函数的变量
传入函数
一个函数的参数是否可以接受另外一个函数作为参数,这种函数就叫做高阶函数。
最简单高阶函数实例:
def func(x,y,z):
return z(x)+z(y)#abs(x)+abs(y)
print(func(-4,6,abs))
返回函数
高阶函数除了可以接受函数作为参数外,还可以吧函数作为值返回
Def sum(args):
Ax = 0
For var in args:
Ax+=var
Return ax
_______________________________________________________________
def func(*args):
def sum():
ax = 0
for n in args:
ax+=n
return ax
return sum
a = func(1,2,3,4,5)
print(a())
内部函数可以引用外部函数的参数和局部变量,当外部函数返回内部函数时,相关参数和变量都保存在返回的函数当中,这就是闭包
def func(*args):
def sum():
ax = 0
for n in args:
ax+=n
return ax
return sum
a = func(1,2,3,4,5)
a1 = func(1,2,3,4,5)
print(a()==a1())
注意:当调用func函数时,每次调用都会返回一个新的函数,即使传入的参数相同
闭包:
def count():
fs=[]
for i in range(1,4):
def f():
return i*i
fs.append(f)
return fs
f1,f2,f3 = count()
print(f1())
print(f2())
print(f3())
牢记:返回函数不要引用任何循环变量,或者后面会发生改变的变量
def count():
def f(j):
def g():
return j*j
return g
fs=[]
for i in range(1,4):
fs.append(f(i))#立刻被执行,所以i的当前值被传入f()
return fs
f1,f2,f3 = count()
print(f1())
print(f2())
print(f3())