type
status
date
slug
summary
tags
category
icon
password
高阶函数:一等公民
- 函数在Python是一等公民(First-Class Object)
- 函数也是对象,是可调用对象
- 函数可以作为普通变量,也可以作为函数的参数、返回值
高阶函数
高阶函数(High-order Function)
- 数学概念 :
y = f(g(x))
- 在数学和计算机科学中,高阶函数应当至少满足下面一个条件的函数
- 接受一个或多个函数作为参数
- 输出一个函数#
观察下面的函数定义,回答问题:
sorted函数原理
练习:自定义sort函数
仿照内建函数sorted,请实现一个sort函数(不能使用内建函数),能够为列表元素排序
思考:通过练习,思考sorted函数的实现原理,map,filter函数的实现原理
思路:
- 内建函数sorted函数,它返回一个新的列表,使用reverse可以设置升序或降序,使用key可以设置一个用于比较的函数(自定义函数也要实现这些功能)
- 新建一个列表,遍历原列表,和新列表中的当前值依次比较,决定待插入数插入到新列表的什么位置
实现:
内建高阶函数
排序sorted
定义:
sorted(iterable, *, key=None, reverse=False) → list
过滤filter
- 定义:
filter(function, iterable)
- 对可迭代对象中元素进行遍历,满足条件的元素筛选出来,返回一个迭代器
- function参数是一个参数的函数,且返回值应当是bool类型,或其返回类型等效布尔值。
- function参数如果是None,可迭代对象的每一个元素自身等效布尔值
映射map
- 定义:
map(function, *iterable) -> map object
- 对多个可迭代对象的元素,按照指定的函数进行映射,并返回一个迭代器
柯里化**
- 指的是将原来接受两个参数的函数变成新的接受一个参数的函数的过程。新的函数返回一个以原有第二个参数为参数的函数。
- 数学概念就是:z = f(x, y) 转化成 z = f(x)f(y)的形式
例如:
原来函数调用为
add(4, 5)
,柯里化目标是add(4)(5)
每一次括号说明是函数的一次调用,说明
add(4)(5)
是2次函数调用练习: