知识内容:
1.python对象模型
2.数字与bool
3.字符串
4.列表与元组
5.字典与集合
一、python对象模型
1.python对象模型
对象是python语言中最基本的概念,在python中的所有的一切都可以称为对象。python中有许多内置对象供开发者使用,例如数字、字符串、列表、字典、集合等等,还有大量的内置函数(前面提到的print()和type())
2.python内置对象
3.可变、不可变数据类型和hash
(1)可变数据类型和不可变数据类型
python中的数据类型可以分为可变数据类型和不可变数据类型
可变数据类型: 列表、字典、集合(set)
不可变数据类型: 数字、字符串、元组
从内存角度看列表和数字的变与不变:
1 >>> l = [1, 2, 3, 4]2 >>>id(l)3 84221264
4 >>> l[1] = 1.5
5 >>>id(l)6 84221264
7 >>>l8 [1, 1.5, 3, 4]9 >>> print("列表是可变数据类型")10 列表是可变数据类型11 >>> a = 1
12 >>>id(a)13 494523440
14 >>> a = 3
15 >>>a16 3
17 >>>id(a)18 494523472
19 >>> print("数字是不可变类型")20 数字是不可变类型
列表中某项赋新值之后id值未变,在内存上还是原来的列表,所以说列表是可变类型,而数字赋新值后id发生了改变说明数字是不可变类型
字符串是不可变类型
1 >>> s = 'hello'
2 >>> s[1] = 'a'
3 Traceback (most recent call last):4 File "", line 1, in
5 TypeError: 'str' object does notsupport item assignment6 >>> s = 'hello'
7 >>>id(s)8 58865760
9 >>> s += 'python'
10 >>>s11 'hellopython'
12 >>>id(s)13 58886128
字符串可以向列表一样使用索引操作,但是不能像修改列表一样来修改字符串的值,当我们对字符串进行拼接时,原理和整数一样,id值已经发生了改变,
相当于变成了另一个字符串,所以说字符串也是一个不可变类型
元组-不允许修改值,也是不可变类型
1 >>> t = (1, 2, 3, 4)2 >>> t[1] = 1.5
3 Traceback (most recent call last):4 File "", line 1, in
5 TypeError: 'tuple' object does not support item assignment
(2)hash
hash的定义: Hash,一般翻译做“散列”,是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数
特征: hash值的计算过程是依据值的特征来计算,这就要求被hash的值必须固定,也就是说被hash的值必须是不可变的
注: 可变类型不可hash,不可变类型可hash
应用: 文件签名、MD5加密、密码验证
1 >>> hash("你猜我是谁")2 1186796725
3 >>> hash("wyb")4 1957863783
5 >>> hash((1,2,3))6 -378539185
二、数字
1.数字属于不可变对象
修改整形变量值的时候并不是真的修改这个变量的值而是先把值存放到内存中,然后修改变量使其指向新的内存地址,浮点数、复数等数字类型以及其他类型的变量均具有同样的特点
示例:
1 x = 3
2 print(id(x))3 x = 5
4 print(id(x))5
6 #id(): 返回一个整数,代表变量在内存中的地址
7 #以上两个id返回的值明显不一样,说明变量值的地址是不一样的
2.数字可以表示任意大的数值
在python中数字可以表示任意大的数值,在命令行中测试如下:
3.数字类型
(1)int(整数)
整数可以分为十进制数、十六进制数、八进制数、二进制数,十进制数就是普通的整数,十六进制数以0x或0X开头,八进制数以0o或0O开头,二进制数以0b或0B开头
注: 在python2中整数分为int和long两种,但是在python3中只有int一种
(2)float(浮点数)
浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型
注: 浮点数的取值范围和精度一般无限制,但是浮点数运算可能存在误差,也就是可能有不确定尾数
1 >>> 0.1+0.2
2 0.30000000000000004
3 >>> 0.1+0.2 == 0.3
4 False5 >>> round(0.1+0.2)==0.3
6 False7 >>> round(0.1+0.2, 1)==0.3
8 True
不确定尾数
(3)complex(复数)
复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数
示例:
1 x = 2 #整数
2 print(type(x))3 y = 3.6 #浮点数
4 print(type(y))5 c = 3 + 4j #复数
6 print(type(c))7 print(c.real) #复数的实部
8 print(c.imag) #复数的虚部
9
10 #输出结果:
11 #
12 #
13 #
14 #3.0
15 #4.0
View Code
数字类型其他相关操作:
1 #数据类型 - Numbers
2
3 #python3 支持int、float、bool、complex(复数)这些Numbers类型
4
5 #int类型:
6 a = 33333333333333333333333333333333333333333333333333
7 print(type(a))8
9 #float类型:
10 a = 3.333333333333333333333333333333333333333333333333
11 print(type(a))12
13 #bool类型: True\False
14 a =True15 print(type(a))16
17 #complex(复数)类型:
18 a = 87 + 3j
19 print(type(a))20
21
22 #Numbers有关的操作符:
23 #算术操作符: + - * / % ** // not > < == >= <=
24 #比特操作符: ~ & | ^ >> <<
25
26 a = 2
27 b = 3
28
29 #算术操作符: + - * / % ** // not > < == >= <=
30 print("a = 2")31 print("b = 3")32 print("a+b =", a+b)33 print("a-b =", a-b)34 print("a*b =", a*b)35 print("a/b =", a/b) #真正的除法
36 print("a%b =", a % b) #求余数
37 print("a**b =", a**b) #乘方
38 print("a//b =", a//b) #地板除法(去掉小数位)
39 print("not a =", not a) #取反
40 print("a==b =", a == b) #判等
41 print("a>b =", a >b)42 print("a=b =", a >=b)44 print("a<=b =", a <=b)45
46 #比特操作符: ~ & | ^ >> <<
47 #~: 按二进制取反;按照补码规则,结果数字为-(A+1)
48 #&: 并操作: 只有两个比特位都为1时结果中的对应比特位才设为1,否则设为0
49 #|: 或操作: 只要两个比特位有一个为1,结果中的对应比特位设为1,否则设为0
50 #^: 异或操作:如果两个比特位相同则结果中的相应比特位设为0,否则设为1
51 #>>:按比特位右移
52 #<<:按比特位左移
53
54 #并 - 或 - 异或的比特位操作如下所示:
55 #A B &(并) |(或) ^(异或)
56 #0 0 0 0 0
57 #0 1 0 1 1
58 #1 0 0 1 1
59 #1 1 1 1 0
60
61 a = ~30 #按二进制取反,结果为-31
62 b = 3 & 3 #二进制并操作,结果为3
63 c = 3 & 1 #二进制并操作,结果为1
64 d = 3 ^ 1 #二进制异或操作,结果为2
65 e = 3 << 1 #二进制按比特位左移操作,结果为6
66
67 print(a)68 print(b)69 print(c)70 print(d)71 print(e)72
73
74 #和Numbers类型有关的的内置函数:
75 #(1)通用函数:
76 #str(A) --> 将参数转换成可显示的字符串
77 #type(A) --> 返回参数的类型对象
78 #bool(A) --> 将参数转换成bool类型
79 #int(A) --> 将参数转换成int类型
80 #float(A) --> 将参数转换成float类型
81 #complex(A)--> 将参数转换成complex类型
82
83 #(2)数值类型特定函数:
84 #abs(A) --> 取绝对值
85 #divmod(A,B)-->除模操作: 生成一个元祖,形式为(A/B,A%B)
86 #pow(A,B) --> 幂操作符: 结果为"A的B次方"
87 #round(A) --> 返回参数的四舍五入结果
88 #hex(A) --> 将A转换成用十六进制表示的字符串
89 #oct(A) --> 将A转换成用八进制表示的字符串
90 #chr(A) --> 将A转换成ASCII字符,要求0<=A<=255
91 #ord(A) --> chr(A)的反函数
View Code
4.bool(布尔型)
bool型在python中有两个值: True(真)和False(假),两者值分别为1和0,主要用来做逻辑判断
1 >>> a = 3
2 >>> b = 5
3 >>> a > b #不成立就是False,即假
4 False5 >>> a < b #成立就是True,即真
6 True
三、字符串
1.字符串的表示
(1)用单引号、双引号或三引号括起来的符号系列称为字符串, 并且单引号、双引号、三单引号、三双引号可以互相嵌套,用来表示复杂字符串
1 "wyb", 'Hello, World', "python", '''Tom said, "Let's go"'''都是字符串
(2)空串表示为'', ""
1 #下面是空串:
2 msg = ''
3 name = ""
(3)三引号表示的字符串