1、高阶函数
map()
reduce()
filter()
sorted()
2、返回函数
高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回
3、闭包的定义:
○ 在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。
4、装饰器
装饰器的语法以@开头,接着是装饰器函数的名字和可选的参数。紧跟着装饰器声明的是被修饰的函数和装饰函数的可选参数
01 单层装饰器
执行流程
被修饰的函数——>@—>外层函数—>内层函数—>参数—>结束
02 多层装饰器
程序开始 (自上而下执行)
程序结束(自下而上执行)
被修饰的函数——>@1—>外层函数—>内层函数—>参数—>@2—>外层函数—>内层函数—>参数—>第二层结束—>第一层结束
5、递归函数
○ 定义:在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
○ 递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。
○ 缺点是过深的调用会导致栈溢出。
6、偏函数
由functools.partial创建,它的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单
7匿名函数的另一个别称是“lambda表达式”
○ lambda表达式的语法:
lambda 参数: 表达式(输出语句/返回值)
8、数据结构的定义和分类
01、定义:数据结构是计算机存储、组织数据的方式
02、数据结构可分为逻辑结构和物理结构
逻辑结构:是指数据对象中数据元素之间的相互关系。
分为四种:集合结构、线性结构、树形结构和图形结构
物理结构:是指数据的逻辑结构在计算机中的存储形式。
分为两种:顺序存储结构和链式存储结构。
9、算法
是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且 每条指令表示一个或多个操作。
○ 算法的基本特性:
输入输出,算法具有零个或多个输入,至少有一个或多个输出。
有穷性,算法在执行有限步后能够自动结束,不会出现无限循环。
确定性,算法的每一步都具有确定的含义,不会出现二义性。
可行性,算法的每一步都能够通过执行有限次操作完成
○ 算法复杂度分为时间复杂度和空间复杂。
○ 时间复杂度是指执行算法所需要的计算工作量
○ 空间复杂度是指执行这个算法所需要的内存空间
时间复杂度的几条基本计算规则:
- 基本操作,即只有常数项,认为其时间复杂度为O(1)
2. 顺序结构,时间复杂度按加法进行计算
3. 循环结构,时间复杂度按乘法进行计算
4. 分支结构,时间复杂度取最大值
5. 判断一个算法的效率时,往往只需要关注操作数量的最高次项,其它次要项和常数项可以忽略
6. 在没有特殊说明时,我们所分析的算法的时间复杂度都是指最坏时间复杂度
○ 线性表是具有零个或多个数据元素的有限序列
○ 除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的
○ 线性表的基本特征:
○第一个数据元素没有前驱元素;
○ 最后一个数据元素没有后继元素;
○ 其余每个数据元素只有一个前驱元素和一个后继元素。
○ 线性表按物理存储结构的不同可分为顺序表(顺序存储)和链表(链式存储):
® 顺序表(存储结构连续)
® 链表(存储结构上不连续,逻辑上连续)
◊ 顺序表是在计算机内存中以一组地址连续的存储单元依次存储数据元素的线性结构。
◊ 顺序表的优缺点:
○ 优点:支持随机访问
○ 缺点:插入和删除操作需要移动大量的元素,造成存储空间的碎片。
® 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是不像顺序表一样连续存储数据,而是在每一个节点(数据存储单元)里存放下一个节点的位置信息(即地址)。
® 链表根据构造方式的不同可以分为:
○ 单向链表
○ 单向循环链表
○ 双向链表
◊ 单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。
◊ 双向链表