高阶函数闭包

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高阶函数闭包相关的知识,希望对你有一定的参考价值。

什么是高阶函数?

一个函数的参数是否可以接受另外一个函数作为参数,这样的函数就叫做高阶函数。

最简单的高阶函数实例:

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

划重点:返回函数不要应用任何循环变量,或者后面会发生改变的变量。

本文出自 “linux学习” 博客,请务必保留此出处http://12681282.blog.51cto.com/12671282/1905054

以上是关于高阶函数闭包的主要内容,如果未能解决你的问题,请参考以下文章

装饰器,闭包,高阶函数,嵌套函数

Python高阶函数-闭包

Go的魅力, 函数式(柯里化, 闭包, 高阶函数), Python@装饰器, 封装

5.初识python装饰器 高阶函数+闭包+函数嵌套=装饰器

190401装饰器-高阶函数-闭包

Python-20_装饰器-01_基础高阶函数闭包