高阶函数

  在数学和计算机科学中,高阶函数应该当是至少满足下面一个条件的函数

    接受一个或多个函数作为参数;

    输出一个函数

def counter(base):
    def inc(step=1):
        nonlocal base
        base += step
        return base
        # s = base
        # s += step
        # return s
    return inc

f = counter(5)
print(f())
print(id(f))

f1 = counter(5)
print(f1())
print(id(f1))

思考以上代码,函数counter是不是一个高阶函数?f和f1相等吗?



结合以前所学,自定义sort函数

  排序问题

    依照内建函数sorted,请自行实现一个sort函数(不使用内建函数),能够为列表元素排序

  思路:

    内建函数sorted函数是返回一个新的列表,可以设置升序或降序,可以设置一个排序的函数

    自定义的sort函数也要实现这个功能。

    新建一个列表,遍历原列表,和新列表的值依次比较决定如何插入到新列表中

  思考:

    sorted函数的实现原理,扩展到map、filter函数的实现原理

lst = [1, 5, 3, 2]
def sort(iterable, reverse=False):
    ret = []
    for x in iterable:
        for i, y in enumerate(ret):
            flag = x>y if reverse else x 
  
def sort(iterable, fn=lambda a, b: a>b):
    ret = []
    for x in iterable:
        for i, y in enumerate(ret):
            if fn(x, y):
                ret.insert(i, x)
                break
        else:
            ret.append(x)
    return ret
print(sort([1, 4, 5, 3, 2]))