Python--核心编程特性
1.模块导入问题
如何导入模块:
import sys
如何查看该模块路径:
prinnt(sys.path)
2.== 与 is 的比较 返回Ture Flase
"=="用来比较两个值是否相等
"is"用来表示两个变量是否是同一个,比较的是内存地址(针对引用类型(list,tuper,dict)
1 a = [1,2,3] 2 b = [1,2,3] 3 a == b 4 a is b 5 基本数据验证 6 a=256 7 b=256 8 a is b 9 a == b 10 [-5 257]范围内的数字为同一个值
特殊:在基本类型中,有一个小整数,在[-5,max]之间是Ture
value1 = -6 value2 = -6 print(value1 == value2) Ture print(value1 is value2) Flase
3.深浅复制问题
1.深浅copy概念
快捷方式
副本
嵌套列表复制时,如果是深copy,会递归复制列表
浅copy只复制当前列表
使用copy复制时,要先导import copy模块
a = [1,2,3] b = a print(id(a)) print(id(b)) import copy c = copy.copy(a) d = copy.deepcopy(a) print(id(c)) print(id(d))
2.嵌套列表深copy
import copy list1 = [1,2,3] list2 = [4,5,6] list3 = [list1,list2] list4 = copy.copy(list3) list5 = copy.deepcopy(list3) list1.append(10) print(list4) print(list5) print(id(list4)) print(id(list5))
输出:[[1, 2, 3, 10], [4, 5, 6]]
[[1, 2, 3], [4, 5, 6]]
2357803911112
2357803911048
4.进制问题
进制问题:
十进制:
0 ~ 9
1、二进制
0 1
0b
2、八进制
0-7
0o
3、十六进制
0-9 A-F
0x
十进制转换二进制
除以2 取余数(倒着)
10 --> 1010
十进制转2,8,16进制
1、函数实现
2:
bin()
8:
oct()
16:
hex()
2、手动推算
2:
除以2 倒取余数
8:
除以8 倒取余数
16:
除以16 倒取余数
如果余数为10,应该是A
其他进制转换为十进制
1、函数实现
2->10
int('0b1010',2)
8->10
int('0o144',8)
16->10
int('0x3c',16)
2、方法推算
例如:
二进制数字1010
0 * 2^0 + 1 * 2^1 + 0 * 2^2 + 1 * 2^3
a = 10 resutl = bin(a) print(type(resutl)) print(resutl) result2 = int('0b1010',2) print(result2) b = 1000 # 打印八进制的字符串 print(oct(b)) # 打印十六进制的字符串 print(hex(b)) c = '0x3e8' print(int(c,16))
5.原码,反码,补码
原码、反码、补码 1 - 1 1 + -1 正数1的二进制形式 0000 0001 0000 0001 0000 0001 负数1的二进制形式(原码、反码、补码=反码+1) 1000 0001 原码 1111 1110 反码 1111 1111 补码 1000 0010 -2 0000 0001 1111 1111 0000 0000
6.位运算
节约内存,效率高
直接基于二进制操作
2 -> 8
2 + 6
2 * 4
左移:
<<
2 * 2^n
右移:
>>
8 / 2^n
print(2 << 2) print(8 >> 2) print(4 << 3) print(64 >> 3) # 按位与 & 都为1的时候结果1 print(3 & 5) # 按位或 丨 有一个为1结果为1 print(3 | 5) # 按位异或 相同为0,不同为1 对同一个数字异或两次,得到源数据 result = 3 ^ 5 print(result) print(result^ 5) # 按位取反 " ~ " print('-'*50) # 按位取反,得到原码->取反码->取补码 print(~5)