1:在数学中高阶函数的定义
y = f(g(x))
2:在数学和计算机科学中,高阶函数是至少满足下列一个条件的函数:
接受一个或多个函数作为输入
输出一个函数
3:在数学中它们叫算子(运算符)或泛函。微积分中的导数就是常见的例子,因为它映射一个函数到另一个函数。
4:例如
f = x + 3
g = x * x
g(f(7)) 结果是100
# 代码如下
def f(x):
return x + 3
def g(x):
return x * x
result = g(f(7))
print(result)
# sorted(iterable[, key][, reverse]), 第一个参数为iterable:可迭代对象,第二个参数为key:是一个函数,第三个参数是reverse:是bool类型
# 示例1:反向排序
new_str = sorted('abcdefg', reverse=True)
print(new_str)
# 示例2: 这里的iterable_obj是一个嵌套列表,func是一个lambda函数,指定使用哪个元素进行排序,这个lambda函数输出的是x[1],说明使用的是每一个元素的第二项进行排序,reverse为True,表示正序排序
iterable_obj = [[1,2], [2,3], [4,1], [7,3], [100,23], [34,11]]
func = lambda x: x[1]
new_list = sorted(iterable_obj, key=func, reverse=False)
print(new_list)
# filter(function, iterable) --> filter object, 第一个参数是一个函数,实现过滤,第二个参数是可迭代对象
# 示例3:如果[-3,-2,-1,1,2,3]的元素大于0,那么传递到lambda函数为True,那么就会被保留下来,其余的丢弃。因此最后的结果是大于0的元素保留,小于0的元素丢弃
result = filter(lambda x: x > 0 , [-3,-2,-1,1,2,3])
print(result) # filter object
for i in result:
print(i)
# map(func, *iterables) --> map object:第一个参数func为函数,实现函数映射的功能,第二个参数iterables为可迭代对象
# # 示例4:lambda函数是实现映射,map函数的功能是将列表中的每一个元素+1,且返回新列表
map_obj1 = map(lambda x: x+1, [1,2,3])
print(map_obj1)
for i in map_obj1:
print(i)
# 示例5:这里传递了两个列表,必须将这两个列表封包传递
map_obj2 = map(lambda x, y: x+y, *([1,2,3], [1,2,3]))
print(map_obj2)
for i in map_obj2:
print(i)
# sorted高阶函数自实现
def my_sorted(iterable, key=lambda a,b: a<b, reverse=False):
ret = []
for x in iterable:
for i, y in enumerate(ret):
isReverse = reverse
if key(x,y) if not isReverse else key(y,x):
# 三元表达式(三目运算符),已中间为判断基准,为真执行前面的,为假执行后面的
ret.insert(i, x)
break
else:
ret.append(x)
return ret
print(my_sorted([3,21,3,4,5], reverse=False))
# 在数学中,柯里化即:将f(x, y) 转换为 f(x)(y)的形式, f(x, y) = f(x)(y)
# 代码转换过程
def add(x, y):
return x + y
print(add(1,2))
def add_currying(x):
def _add(y):
return x + y
return _add
print(add_currying(1)(2))