Python高階函數

高階函數

  在數學和計算機科學中,高階函數應該當是至少滿足下面一個條件的函數

    接受一個或多個函數作爲參數;

    輸出一個函數

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<y
            if flag:
                ret.insert(i, x)
                break
        else:
            ret.append(x)
    return ret

print(sort(lst))
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]))


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章