- Python语言概述
- Python是一种解释执行的面向对象编程语言(P9)
- Python是完全面向对象的语言,所有的数据类型都是对象(P10)
- 标识符的规则(P15)
- 关键字(P16)
- id()给出变量的地址,可以用来对比是否是同一个对象(P16)
- input()输入的是一整行字符串(P17)
- split()分割一行字符串
- map()将列表中的多个字符串转成整数
- print()输出一个值或多个值(P18)
- end和sep的作用
- 用Python语言编写程序
- 基本类型:整数和浮点数(P23-26)
- int()和float()函数(P27)
- /和//的区别
- 理解--和---这类运算
- 浮点数相等的判断
- 复数的表示和基本运算(P27)
- 数学库和常用函数(P28)
- 字符串
- 转义字符(P30)
- ⻓字符串的表示方法(P31)
- 关系运算和逻辑运算(P32)
- 注意优先级和复合运算
- 列表(P35)
- 列表变量是管理者,赋值是管理权的分享(P54)
- 注意列表加法和乘法的计算
- 列表和字符串的互相转换list(字符串)的结果
- 内置转换函数(P36)
- 注意ord和chr的用处
- ord是字符到整数
- chr是整数到字符
- 语句
- 赋值
- if
- for和range注意range的区间,尤其是步进为负数时的计算(P43)
- range()所产生的数列是在for开始时就确定的(P42)
- 列表推导式(P44)
- 看作是forin的语法糖
- 格式化输出(P46)
- format函数
- 书上format函数的格式控制也可以用于f字符串
- 使用字符串、列表和元组
- 序列的基本操作(表3-1)和P52
- 下标的有效范围
- 负的下标的意义
- 切片(P53)
- 步进和负的步进
- 复制列表
- 字符串
- 字符串常用函数(表3-2)
- 列表
- 列表字面量是表达式
- 列表不能和非列表运算
- 列表元素的删除(del、remove、pop)的区别(P70)
- del <列表元素>
- L.remove(value)
- L.pop(index)
- 列表函数(表3-4)
- split和join(P71)
- split遇到连续的分隔符怎么办
- join是字符串的函数
- 两层列表构成的矩阵及其运算(P67)
- 元组
- 随机库
import random
(P74)
- random.random和random.randint(P74)
random.random()
是返回左闭右开区间[0.0,1.0)
的浮点数
random.randint(a,b)
是返回闭区间[a,b]
的随机整数
- 条件、循环和其他语句
- if...elif...else
- while
- break和continue(P90)
二分搜索(P97)
- 对于已经排序的数据,可以使用二分法
- 每次取中间位置上的数来测试,如果比目标大,则在低半段中搜索,否则在高半段中搜索
- 直到...
- 找到,或
- 被测数据不存在
a=[11,14,...] x=int(input()) found=-1 left=0 right=len(a)-1 while left<=right: mid=(left+right)//2 if a[mid]>x: right=mid-1 elif a[mid]<x: left=mid+1 else: found=mid break print(found)
冒泡排序
- 选择和冒泡排序(P101)冒泡排序更会考
- 冒泡
a=[80,58,...] for right in range(len(a),0,-1): for i in range(0,right-1): if a[i]>a[i+1]: a[i],a[i+1]=a[i+1],a[i] print(a)
- 异常处理(P103)
- try...except...else...finally
- 集合和字典1. 字面量的表示方式
- 集合特征和运算
- 字典运算
- 字典键的类型必须是不可变的类型(元组的元素也必须是不可变的)
- []和get()的区别(P116)
- get()如果找不到键又没有给它默认值,那就返回None
- 字典的遍历是对键的遍历
- 字典函数(表5-3)
函数
- 函数定义
- lambda(P125)
- lambda 的⼀般形式是关键字lambda后⾯跟⼀个或多个参数,紧跟⼀个冒号,后⾯是⼀个表达式
- 作为表达式,lambda返回⼀个值
函数参数
位置参数:按位置赋值
关键字参数:如
end=','
, 指定对应参数的名字进行调用,甚至可以采用与函数定义不同的顺序调用默认值参数:当调⽤⽅
没有提供对应的参数值
时,你可以指定默认参数值。如果你提供参数值,在调⽤时会代替默认值。默认参数值在函数对象被创建时计算。不是在运行时新创建的。这辈子就创建一次。
不定⻓数⽬参数:
*b
将多个参数打包成元组。print
函数参数:print(*object,sep=" ",end="\n",file=sys.stdout)
。- 当在行参前面加上
或
*
时,表示不定⻓参数,分别⽤来接收不带变量名的多余参数和带有变量名的多余参数,分别将它们以元组和字典的形式接收进函数。
- 当在实参的前⾯加上
或
*
时,就意味着拆包:
表示将序列拆成⼀个个单独的实参,
- ⽽
*
则表示将字典拆成⼀个个单独的带变量名的实参
- 位置参数和关键字参数混用(P127)
首先应该写位置参数,然后是关键字参数
- 参数默认值(P128)默认值为列表等可变类型时,实际实现了函数内部的持久存储
当实参是不可变对象时,形参值改变不会影响实参!
当实参是可变对象时,形参值改变可能会影响实参!
- 返回值,可以返回多个值(P135)
- 返回的多个值和接收多个参数是一样的,以元组的形式打包传递
- 全局变量vs局部变量
- global(P136)
- 递归
- 递进不做计算,回归的时候做计算
- 阶乘
- 斐波那契数列
- 学会手动执行递归程序
杨辉三角:
def yang(n): if n==1: r = [1] else: p = yang(n-1) s=0 r=[] for i in p: r.append(s+i) s=i r.append(1) print(r) return r
树状递归的记忆优化(使用全局变量字典)(P138)
pre={0:1,1:1} def fib(n): if n in pre: return pre[n] else: newvalue=fib(n-1)+fib(n-2) pre[n]=newvalue#增加字典的条目 return newvalue
内置函数
sorted()函数
sorted()
是制造新的容器,L.sort()
是在原有列表修改
sorted(iterable ,key=None, reverse=False)
,reverse = False
升序(默认)。
- 排序规则:
map(function,iterable,...)
对序列的每个函数调用function函数,iterable是序列,结果是迭代器
filter(f, sq)
函数的作用是对于sq
的每个元素s
,返回所有f(s)
为True
的s
组成的filter
对象,filter
对象对象本身是一个可枚举量
- 偶数留下:
- 偶数留下再平方:
map(square, filter(is_even, range(5)))
。
- reduce:
- key参数(P140)
- key=lambda t:t[n]
- zip:将两列表转成元组的列表:
print(list(zip(a,c))) # 元素个数与最短的列表⼀致
- zip:字典键值互换:
d1=dict(zip(d.values(),d.keys()))
。
- eval(P141)
- any():参数只要有一个是True,就返回True,参数都是False时,返回False。
- all():参数都是True,才返回True,否则就是False。
- enumerate
enumerate(
sequence,[start=0])
,start为下标起始位置。
文件
- 打开文件的方式和模式(P150,表7-1)
- 默认打开文本文件读
- 文件的函数(表7-2)
- 可以参考如何复制一个文件(例7-2)
- Ctrl-D或Ctrl-Z结束输入
类和对象
Python中对象的概念很⼴泛,Python中的⼀切内容都是对象,除了数值、字符串、列表、元组、字典、集合、range对象等等,函数也是对象,类也是对象。
类定义属性(数据)和行为(方法)的模版。Python的所有类型都是类,包括内置的int、str等等。
Python类是封装了变量和方法的复合数据类型。
- 每个类有⾃⼰的名字空间,类名是空间名
- 每个对象也有⾃⼰的名字空间
- 存储在类名称空间中的名称是类的成员
- 类成员包含
- 类属性
- 类⽅法
实例(instance):是⽤类产⽣的对象
使⽤圆点运算符(.)引⽤⽅法和属性
类中的函数称为方法,类中包含初始化方法和其他方法。
初始化方法总是被命名为__init__,这是一个特殊的方法,每当类创建新实例时,Python都会自动运行它。
- OOP三大特性:封装、继承和多态(P175)
- 定义类(P176)
- 构造方法的名字(init),构造方法不能被主动执行(P176)
- 成员函数的第一个参数都是self(P177)
- 创建对象:类名()会自动调用构造函数(P177)
- 对象的属性和值(P176)
- 构造方法内对self的变量赋值形成了成员变量(属性)
- 私有成员变量
- 以一个下划线为前缀,格式如_xxx。它是受保护成员,不能用'from module import *'导入
- 以两个下划线为前缀和两个下划线为后缀,格式如__xxx__。它是系统定义的特殊成员
- 以两个下划线为前缀但不以两个下划线为后缀,格式如___xxx。它是私有成员,只有类内自己能访问,不能通过实例直接访问到这个成员。
- 外部对不存在的成员变量的赋值给对象增加了新的成员变量