一、高阶函数、闭包
admin
2023-07-31 15:20:10
0

什么是高阶函数?

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

最简单的高阶函数实例:

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

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

相关内容

热门资讯

伊朗总统因美军袭击提前回国 据伊朗国家电视台今天(7月8日)报道,美军对伊朗南部锡里克的袭击已造成多人受伤。几个小时前刚刚抵达伊...
《恋与深空》再次道歉:决定不参... 7月8日,乙女向恋爱手游《恋与深空》官方再发道歉声明:近期,《恋与深空》引发社会各界的广泛关注,给所...
载有伊朗已故最高领袖哈梅内伊遗... 当地时间7日,伊朗总统佩泽希齐扬及其随行代表团抵达伊拉克纳杰夫。载有伊朗已故最高领袖哈梅内伊遗体的飞...
“美国优先”嵌入足球比赛,一张... 【环球时报驻德国特约记者 青木 环球时报特约记者 贺听岚】在当地时间6日结束的一场美加墨世界杯1/8...
巴基斯坦一架货机失联,机上载有... 新华社伊斯兰堡7月8日电(记者唐斌辉)巴基斯坦机场管理局7日晚发表声明说,一架货机在从阿联酋沙迦飞往...
总投资2500余万,“上坟祭祖... 近日,山东泰山景区架设135公里刀片刺绳隔离网一事持续引发关注。广东望郎归、浙江北高峰等多地山野,也...
美官员称对伊朗打击是“惩罚”,... 当地时间7月7日,总台记者获悉,一名美国官员表示,美国正在对伊朗境内目标实施的军事打击“不是对等回应...
伊朗严正警告美国 伊朗外交部副部长加里巴巴迪当地时间8日在社交媒体上表示,美国取消对伊朗石油销售制裁的豁免,构成对美伊...
四川宜宾市发生5.0级地震,震... 中国地震台网正式测定:7月8日6时12分,在四川宜宾市高县(北纬28.52度,东经104.68度)发...
美军发动打击,伊朗多地传出爆炸... 当地时间今天(7月8日)凌晨,伊朗南部格什姆岛及锡里克、阿巴斯港等多地传出爆炸声。据伊朗媒体报道,锡...