python的组成全景:
- 程序由模块构成
- 模块包含语句
- 语句包含表达式
- 表达式建立并处理对象
python的内置对象:
- 数字
- 字符串
- 列表
- 字典
- 元组
- 文件
- 集合
- 其他类型: 类型、None、布尔型
- 编程单元类型: 函数、类、模块
- 与实现相关的类型: 编译的代码堆栈跟踪
数字
数字包含:整数、浮点数、复数、十进制数、带分子和分母的有理分数以及集合
注意:python的整数类型会自动提供额外的精度
python的命令行交互方法调用的是repr,而print调用的str
字符串
字符串就是序列中的元素包含了一个从左到右的顺序—序列中的元素根据它们的相对位置进行储存和读取。从严格意思上来说,字符串是单个字符的字符串的序列,其他类型的序列还包括列表和元组。
序列的操作
- len()
- 切片
- S[-1] 和 S[len(s)-1] 结果相等
- S[:] 可以作为复制
不可变性
类型特定的方法
.find()
.replace()
.split()
.upper()
.isalpha()
.isupper()
.strip()
寻求帮助
- dir(s) :显示可以调用的方法
- help(s.replace) :显示帮助信息
列表
列表是一个任意类型的对象的位置相关的有序集合。其大小可变。
序列操作
L 是一个list
len()
L+L[:2]
类型特定的操作
- l.append()
- l.pop()
- l.sort()
- l.reverse()
边界检查
python不允许引用和赋值列表不存在的元素。
嵌套
列表可以嵌套,这样即形成了多重列表。
列表解析
- [row[1] for row in M if row[1] % 2 == 0]
列表解析的速度有优势
注意,将列表表达式的中括号换成括号,列表表达式将会变成一个生成器。
In [8]: M=[1,2,3,4,5,6,7,8,9]
In [11]: G=(row*2 for row in M)
In [12]: next(G)
解析语法同样可以创建集合和字典
In [22]: M=[[1,2,3],[4,5,6],[7,8,9]]
In [23]: {sum(row) for row in M}
Out[23]: {6, 15, 24}
In [24]: {i: sum(M[i]) for i in range(3)}
Out[24]: {0: 6, 1: 15, 2: 24}
字典
字典就是一种映射,他并不是基于位置映射,而是基于key来映射
映射操作
即可以通过key来获得字典的value
重访嵌套
即字典可以值内嵌套字典
键的排序:for循环
d 是一个字典
- d.keys()
- for key in s : 循环的是key
- d.items()
- d.values()
迭代和优化
列表表达式就是一个迭代工具。
不存在的键: if 测试
In [42]: 'f' in d
Out[42]: False
In [43]: if not 'f' in d:print('not in')
not in
In [46]: d['x'] if 'x' in d else 0
Out[46]: 0
In [47]: d.get('x',0)
Out[47]: 0
元组
元组是一个不可变的列表,他提供了完整的约束。
- .index()
- .count()
文件
文件对象是python代码对电脑上外部文件的主要接口。
没有特定的常量语法创建文件,如果需要创建一个文件对象,需调用内置的open函数以字符串的形式传递给他它一个外部的文件名以及一个处理模式的字符串。
其他核心类型
# 例如集合
In [48]: X=set('spam')
In [49]: Y={'h','a','m'}
In [50]: X,Y
Out[50]: ({'a', 'm', 'p', 's'}, {'a', 'h', 'm'})
In [51]: X&Y
Out[51]: {'a', 'm'}
In [52]: X|Y
Out[52]: {'a', 'h', 'm', 'p', 's'}
In [53]: X-Y
Out[53]: {'p', 's'}
# 固定精度浮点数
In [54]: 1/3
Out[54]: 0.3333333333333333
In [55]: (2/3)+(1/2)
Out[55]: 1.1666666666666665
In [56]: import decimal
In [57]: d=decimal.Decimal('3.141')
In [58]: d+1
Out[58]: Decimal('4.141')
In [59]: decimal.getcontext().prec=2
In [60]: decimal.Decimal('1.00') / decimal.Decimal('3.00')
Out[60]: Decimal('0.33')
如何破坏代码的灵活性
用户定义的类
习题
- 什么是不可变?
即创建之后就不可以被改变,数字、字符串和元组都属于这个分类。
- 什么是’序列‘?
即对位置排序的对象和集合。字符串、列表和元组都在这个分类,他们有共同的操作是索引、合并和切片。
- 什么是’映射‘?
即将键和相关值相互关联映射的对象。字典属于此类。
- 什么是多态?
多态意味着一个操作符的意义区别于被操作的对象。python的关键思想就是多态,不要把代码限制在特定的类型上,使代码自动适用于多种类型。