高階函數
在數學和計算機科學中,高階函數應該當是至少滿足下面一個條件的函數
接受一個或多個函數作爲參數;
輸出一個函數
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]))