5-1 什么是变量
>>> [1,2,3,4,5,6] * 3 + [1,2,3]
[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3]
太长了,需要引入变量的概念
变量就是名字
定义一个变量
>>> A = [1,2,3,4,5,6]
>>> print(A)
[1, 2, 3, 4, 5, 6]
= 为赋值符号
上述代码可以改造为
>>> A = [1,2,3,4,5,6]
>>> B = [1,2,3]
>>> A * 3 + B
[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3]
写出优质的代码最基本的要求是可读性要强,变量命名需要注意
5-2 变量的命名规则
变量名的首字符不能为数字且只能使用字母、数字、下划线
系统保留关键字不能使用在变量名中
变量名区分大小写
在Python中变量没有类型限制
5-3 值类型与引用类型
>>> a = 1
>>> b = a
>>> a = 3
>>> print(b)
1 //b没有改变
>>> a = [1,2,3,4]
>>> b = a
>>> a[0] = '1'
>>> print(a)
['1', 2, 3, 4]
>>> print(b)
['1', 2, 3, 4] //b改变了
int和list截然不同,int为值类型,list为引用类型
值类型不可变,引用类型可变。
值类型:int str tuple
引用类型:list set dict
>>> a = 'hello'
>>> a = a + 'python' //a得到的是新的字符串,不是原来的字符串了
>>> print(a)
hellopython
利用id()证明
>>> b = 'hello'
>>> id(b)
62915904
>>> b += 'python'
>>> id(b)
62890296 //两次id不同
证明字符串为不可改变的类型
>>> 'python'[0] = 'o'
Traceback (most recent call last):
File "<pyshell#22>", line 1, in <module>
'python'[0] = 'o'
TypeError: 'str' object does not support item assignment
5-4 列表的可变与元组的不可变
>>> a = [1,2,3]
>>> id(a)
63873192
>>> a[0] = '1'
>>> id(a)
63873192 //列表的id没有改变
>>> a = (1,2,3)
>>> a[0] = '1'
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
a[0] = '1'
TypeError: 'tuple' object does not support item assignment //元组为值类型,不可更改
追加元素:
append()
>>> b = [1,2,3]
>>> b.append(4)
>>> print(b)
[1, 2, 3, 4] //列表可以追加元素,元组不行
对于元组来说,一旦定义不可改变。
在复杂的项目里协作写代码,涉及到数据调用,用元组可以保证数据的稳定。
二维数组的访问
>>> a = (1,2,3,[1,2,4])
>>> a[2]
3
>>> a[3][2]
4
>>> a[3][2] = '4'
>>> print(a)
(1, 2, 3, [1, 2, '4'])
//可以实现修改,因为我们改变的是列表不是元组
5-5 运算符号
算术运算符:
+ - * /
// 取整
% 求余数
** 次方
>>> 2**2
4
另外还有赋值运算符:= += *= /= %= **= //=
比较关系运算符:== != > < >= <=
逻辑运算符:and or not
成员运算符:in 和 not in
身份运算符:is 和 is not
位运算符:& | ^ - << >>
5-6 赋值运算符
为了给变量赋值,先做运算再赋值
>>> c = 1
>>> c += 1
>>> print(c)
2 //python中没有自增、自减运算符
赋值运算符最终落实在赋值上
5-7 比较运算符
两个变量之间比较,不仅仅限于数字,字符串、bool都可以比较
关键在于操作完成后返回一个bool值
>>> 1 == 1
True
>>> 1 > 1
False
5-8 不只是数字才能做比较运算
>>> b = 1
>>> b += b >= 1 //b = 1 + True,答案为2
>>> print(b)
2
字符串关系运算
>>> 'a' > 'b'
False
>>> 'abc' < 'abd' //每个字符单独做比较
True
列表、元组等都可以做关系运算
>>> [1,2,3] < [1,3]
True
>>> (1,2) < (2,3,4)
>>> (1,2) < (2,3,4)
True
5-9 逻辑运算符
主要操作bool类型,且返回类型也为bool类型
and:且
or:或
not:非
>>> True and False
False
>>> True or False
True
>>> not False
True
非bool类型中,
int float中0被认为是False,非0被认为是True
str中空字符串被认为是被认为是False
>>> not '0' //不是空字符串
False
空列表、元组、字典被认为是False
>>> [1] or []
[1] //返回结果用非bool值表示
>>> [] or [1]
[1] //关心返回元素是True还是False
and为True返回后一个值
>>> 1 and 2
2 //读到第二个值才能确定为True所以返回2
>>> 2 and 1
1
or为True返回前一个值
>>> 1 or 2
1 //读第一个值时就已经确定为True了所以返回1
5-10 成员运算符
in 和 not in 是用来判断一个元素是否在一组元素中,返回值是bool类型
>>> a = 1
>>> a in [1,2,3,4,5]
True
>>> b = 6
>>> b in [1,2,3,4,5]
False
字典是对于key:value中的key来操作的
>>> b = 'a'
>>> b in {'c':1}
False
>>> b in {'a':1}
True
5-11 身份运算符
is 和 is not 返回的是bool值,如果两个变量相等,则is返回True。
>>> a = 1
>>> b =1.0
>>> a == b
True //关系运算符比较值相等
>>> a is b
False //比较两个变量身份(内存地址)是否相等
5-12 如何判断变量的值、身份、类型
值、身份、类型是对象的三大特征
分别用==、is、isintance()来判断
>>> a = {1,2,3}
>>> b = {2,1,3}
>>> a == b
True //集合是无序的,值相等
>>> a is b
False
>>> a = (1,2,3)
>>> b = (2,1,3)
>>> a == b
False //元组是有序的,值不相等
>>> a is b
False
对type的判断
>>> a = 1
>>> type(a) == int
True
或者使用isinstance(判断对象,判断类型)
>>> isinstance(a,str)
False
>>> isinstance(a,(str,int,float))
True
5-13 位运算符
&:按位与
|:按位或
^:按位异或
~:按位取反
<<:左移动
>>:右移动
都是把数字当作二进制数进行运算
>>> a = 2
>>> b = 3
>>> a & b // 10 与 11 是 10
2