I. 从类型开始
1. 数据表达
- 1字节=8比特(1B=8b)
- 一字节也可以表示0-255的整数
- 进位以1024为单位:
1kb=2^10 bytes
1Mb=2^10 kb=2^20 bytes
etc.
2. 对象
对象:Python中各种数据的抽象。
- 标识id(identity): 对象一旦创建其ID不再改变,可以看成该对象在内存中的地址, id(x) 返回对象x的ID, a is b 判别 a和b是否同一个对象(ID是否相同 )
- 类型(type):决定了对象可能取值范围以及支持的操作。
强类型语言type(x) 返回对象x的类型
- 值(value): 值可能改变或者不可变,决定于其类型
- 不可变(immutable):有些对象一旦创建其值不可变,比如数字、字符串、元组等
- 可变(mutable): 对象的值可以改变,比如列表、字典等
内置函数type(object)用来返回object的类型
内置函数isinstance(obj,class)用来测试对象obj是否为指定类型class的实例
Python具有自动内存管理功能
- 跟踪所有的对象,并自动删除不再有变量指向的对象。
- 可以显式使用del语句回收那些不再需要的对象所占用的资源
- del x
3. 浮点精度
- 浮点数字面值:浮点数用于表示实数,在内部采用科学计数法表示,因此称为浮点数
- 小数表示:3.14 10. .001
- 科学计数法:15e-2 ( =15*10-2 = 0.15) 3.14e-10 1.0e100
需要说明的是由于计算机内部采用二进制表示,与其他语言一样采用IEEE 574双精度表示浮点数时,有精度误差
a= 0.1 + 0.1 + 0.1
a == 0.3 结果为 False
Python提供了decimal模块(高精度浮点数Decimal)用于十进制数学计算,来保证用户指定的精度
fractions模块用于表示分数
>>>from decimal import Decimal
>>>Decimal.(0.1)
Decimal('0.1000000000000000055511151231257827021181583404541015625')
>>>from fractions import Fraction
>>>Fraction('3/7')
Fraction(3, 7)
4. 运算符
- 优先级顺序:
+ -
* / // %
singal: + -
**
加法、减法: 35+4 2.5 + 3.5
乘法: (35+4)*5 ,3.4*5.2 + 4 ###注意*不能省略
除法:
整除: 5//2 = 2
浮点除法,结果为浮点数:5/2 = 2.5 10/3.2 = 3.125
幂运算: 4**2 = 16 4**0.5 = 2.0
取余(求模) %: 10%5 = 0 20% 3 = 2 -20%3 = 1
一元的改符号 +、- :+8 -8
- 上述运算符支持两个不同的数字类型的对象之间的运算,即混合运算,比如浮点数+整数
II. 列表与切片操作
keynote:
list.append()
list.sort()
list.sorted()
list.reverse()
list.reversed()
浅拷贝vs深拷贝
1. List()
- 序列:列表、元组、字典、字符串、集合
list.append(x) ##将x添加至列表尾部
list.extend(L) ##将列表L中所有元素添加至列表尾部
list.insert(index,x) ##在列表指定index处添加x
list.remove(x) ##删除首次出现的x
list.pop([index]) ##删除列表中所有的元素,但保留列表对象
list.clear() ##删除所有列表元素,但保留列表
list.index(x) ##返回首个x的下标
list.count(x) ##计算x出现的次数
list.reverse() ##原地逆序
list.sort() ##原地排序
###注意:y = x[:] 通过分片操作将列表x的元素全部拷贝给y,如果简单的把x赋值给y:y = x,y和x还是指向同一个列表,并没有产生新的副本。
可以用sorted()返回一个有序副本
list.copy()
del list ##删除整个列表
range(start,stop,step)
乘法可以扩展列表:
>>> list=[1,2,3]
>>> list=list*3
>>> list
[1,2,3,1,2,3,1,2,3]
“*”运算符还可以用来创建多维数组,但需要注意的是通过乘法复制并不创建元素值的复制,而是创建已有元素对象的引用复制。因此,当修改其中一个值时,相应的引用也会被修改
用del list[]或pop.list()可以删除指定位置的元素
>>>a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b) # 打包为元组的列表
[(1, 4), (2, 5), (3, 6)]
>>> zip(a,c) # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped) # 与 zip 相反,*zipped 可理解为解压,返回二维矩阵式
[(1, 2, 3), (4, 5, 6)]
2.切片操作
list[x:y:z]–x表示起始,y表示终止,z表示步长(可以为负)
- 使用切片来截取列表中的任何部分,得到一个新列表
- 使用切片来原地修改列表内容
- 使用del+切片来删除列表元素
3.排序
list.sort()可以用来给列表排序
>>> aList = [3, 4, 5, 6, 7, 9, 11, 13, 15, 17]
>>> import random
>>> random.shuffle(aList)
>>> aList
[3, 4, 15, 11, 9, 17, 13, 6, 7, 5]
>>> aList.sort() #默认为升序排列
>>> aList.sort(reverse = True) #降序排列
>>> aList
[17, 15, 13, 11, 9, 7, 6, 5, 4, 3]
>>> aList.sort(key = lambda x:len(str(x))) #自定义排序
>>> aList
[9, 7, 6, 5, 4, 3, 17, 15, 13, 11]
使用内置函数sorted可以排序并且返回一个新列表:
>>> aList
[9, 7, 6, 5, 4, 3, 17, 15, 13, 11]
>>> sorted(aList)
[3, 4, 5, 6, 7, 9, 11, 13, 15, 17]
>>> sorted(aList,reverse = True)
[17, 15, 13, 11, 9, 7, 6, 5, 4, 3]
III. 字典和映射
keynote
字典是包含key-value映射对的可变序列;
key不允许重复,可以为仁矣不可变对象,比如整数、实数、复数、字符串、元组等;
value可以算任何对象,每个key对应一个值;
### create a dict
mydict = {
key1:object1,...}
### a way to create dict.objects with same values
### dict.fromkeys(keys,values)
>>> dict.fromkeys('zqg','sb')
{
'z': 'sb', 'q'