--------------以下部分摘自马哥教育
函数的一般形式:
y= f(x)
x成为自变量,y是x的函数 (域值)
高阶函数:
y=f(g(x))
定义:
接受一个或者多个函数作为参数
返回一个函数
def counter(base): def inc(step=1): nonlocal base base += step return base return inc foo = counter(5) print(foo()) f1 = counter(5) f2 = counter(5) print(id(f1), id(f2), id(foo))
因为上面例子中,返回的是一个函数,即可以看成返回的是一个对象,所以在调用时,尽管参数值一样,但是,不同的调用产生了不同的对象,存放的地址是不一样的。
高阶函数的用途:
函数作为返回值,往往会形成闭包;
函数作为参数,应用很广泛。
排序问题举例:
lst = [2, 4, 6, 8, 4, 6, 3, 2, 4, 5] def sort(lis, fn=lambda a, b: a < b): def compare(a, b): return a < b if asc else a > b newlst = [] for x in lst: for i, y in enumerate(newlst): if fn(x, y): newlst.insert(i, x) break else: newlst.append(x) return newlst print(sort(lst)) print(sort(lst, lambda x, y: x < y)) print(sorted(lst, reverse=True)) # sorted 排序函数 print(list(map(lambda x: (x, x + 1), lst))) # map 映射函数 print(list(filter(lambda x: x > 3, lst))) # filter 过滤函数
上面例子中我们把逻辑抽象成一个函数,然后有外部作为参数传入,大大增加编程的灵活性。