高阶函数:把函数作为参数传入,这样的函数成为高阶函数。

高阶函数,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())