1.变量
>>> A = [1,2,3,4,5,6]
>>> print(A)
[1, 2, 3, 4, 5, 6]
>>> B= [1,2,3]
>>> A * 3 + B + A
[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 1, 2, 3, 4, 5, 6]
其中,=表示赋值符号
命名规则:(标识符)
- 名字需要有见名知义的效果
- 标识符可以由字母,下划线和数字组成
- 不能以数字开头
- 不能与关键字重名
python建议命名是通过下划线分割单词,而不是其他语言中建议的驼峰命名法。
常量用纯大写表示(不成文的规定)
值类型:int str tuple
引用类型: list set dict
id: 显示某一个变量在内存中的地址
>>> b = 'hello' >>> id(b) 3154052420656 >>> b = b + ' python' >>> b 'hello python' >>> id(b) 3154052420528
不可变验证:
>>> 'python'[0]
'p'
>>> 'python'[0] = '0'
Traceback (most recent call last):
File "<pyshell#14>", line 1, in
<module> 'python'[0] = '0'
TypeError: 'str' object does not support item assignment
列表的可变与元组的不可变:
>>> id(a) 2186010798592 >>> hex(id(a)) '0x1fcf865aa00' >>> a[0] = '1' >>> id(a) 2186010798592 //元组 >>> a = (1,2,3) >>> id(a) 2186018466560 >>> a[0] = '5' Traceback (most recent call last): File "<pyshell#7>", line 1, in <module> a[0] = '5' TypeError: 'tuple' object does not support item assignment
>>> a[0] 1 //数组添加元素: >>> b= [1,2,3] >>> b.append(4); >>> print(b) [1,2,3,4] //元组不可以修改元素,但是元组中的元素如果涉及到引用类型,可以修改引用类型中的元素,这个可能是地址不变就行 >>> a = (1,22,3,6,8) >>> a[0]
1 >>> a[0] = 3 Traceback (most recent call last): File "<pyshell#3>", line 1, in <module> a[0] = 3 TypeError: 'tuple' object does not support item assignment
>>> a = (1,2, [1,2,3]) >>> a[2][1] = 4 >>> a
(1, 2, [1, 4, 3])
2.运算符
算数运算符:
加减乘: + -*
整除: //
求余: %
多次方: 如二次方: 2**2, 三次方: 2**3,四次方: 2**4
注意: 没有自增运算符++和自减运算符++
比较运算符:
除了数字以外其他也可以进行比较:
1.序列比较规则: 对应位依次比较
逻辑运算符:
and or not
布尔值转换:0, 空字符串,{},(),[], set()都会被转换为False
成员运算符:in、 not in
>>> a = 1 >>> a in [1,2,3,4,5] True >>> b = [1] >>> b in [ 1,2,3,4,5] False >>> b in [[1],2,3,4,5] True
可以判断是否在序列,集合
字典成员运算符:
>>> b = 'a' >>> b in {'c' : 1} False >>> b = 1 >>> b in {'c': 1} False >>> b = 'c' >>> b in {'c': 1} True
由上边可以看出,该成员指的是字典的键,判断该键是否在字典的键组中
身份运算符:
只有当取值相等的时候,才会返回结果为true
>>> 1 is 1 True >>> 'c' is 'c' True >>> [1,2,3] is [1,2,3] False >>> a = 1 >>> b = 1.0 >>> a == b True >>> a is b
False
关系运算符比较两个值是否相等,身份运算符则比较两个变量或常亮身份是否相等
>>> a = {1,2,3} >>> b = {2,1,3} >>> a == b True >>> a is b False
集合是无序的,因此值相等,但是,is比较储存地址,因此,不相等
>>> id(a) 2214796242272 >>> id(b) 2214796241376
元组是有序的,而且,地址不同,
>>> c = (1,2,3) >>> d = (2,1,3) >>> c == d False >>> c is d False
判断类型:
a = 'hello' type(a) == int //False type(a) == str //True isinstance(a, str) //True
isinstance的第二种用法:
isinstance(a,(int, str, float))
//true --- 判断a是否是后边三种类型中任意一类的一种
对象的三个特征: id、value、type
位运算符:
>>> a = 2 >>> b = 3 >>> a & b //2 >>> a | b //3
知识补充:
源码,反码,补码;
正整数的原码,反码和补码计算。符号位为0,原码=反码=补码。
负整数:源码除符号位按位取反,得反码,反码+1得补码
1.按位与:
负数与负数的按位与,要先转换成补码,在进行按位与运算,然后在转成补码
例子:-9 & -7 = -15,过程如下图

负数与正数的按位与,负数要转换成补码,正数的补码和原码一样,所以不变,正数与负数的补码进行按位与运算,结果也需转换成原码。
例子:-9 & 10 = 2,过程如下图:

2.按位或
负数按位或,先将要操作的负数转换成补码,在按位或,得到的结果再转换成原码,就是最终结果。

3、按位异或(^)
负数的按位异或,先将操作的负数转成补码,在进行异或操作。得出结果,如果最高位是 1,还要转成原码。如果最高位是 0,则不需要转了。
4、按位取反(~)
先将要取反的负数转成补码,在按位取反。
5、按位左移(<<)
先将要按位左移的负数转成补码,在将补码平移指定的位数,然后在将结果转换成原码。
转换的时候有两种情况,第一种是左移的部分要舍弃的,第二种是不需要舍弃的。
第一种:-5 << 3 = 1000 0101 << 3 = -40,这个数左位移 3 位,1000 0101 第一位是符号位不算,从第二位开始数 3 位是 0,这种情况左移 3 位,左移的部分就舍弃,如果是 1,就不舍弃左移的部分。右边空缺的部位补 0。如下图

第二种:-121 << 2 = 1111 1001 << 2 = -484,这个数左移 2 位,除了第一个符号位,从左边数第 2 位是 1,这种情况左移 2 位,左移的部分不能舍弃,需要在左边补 1,补齐位数。右边空缺的部位补 0。如下图

6、按位右移(>>)
将要右移的负数先转换成补码,在将补码向右平移指定的位数,向右平移的部分舍弃,左边补 1 补齐。再将结果转成原码,就是最终结果。例子:-57 >> 2 = 1011 1001 >> 2 = -15。运算过程如下图

特别说明:图片来源于简书,具体位置已忘记,如有侵权或需要标注出处,请联系我:1261167816@qq.com