高阶函数
在数学和计算机科学中,高阶函数应该当是至少满足下面一个条件的函数
接受一个或多个函数作为参数;
输出一个函数
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]))
转载于:https://blog.51cto.com/limingyu/2178951