一、基础小知识点
1、if/for/while语句中,即使执行语句只有一句,也必须另起一行。
2、在python中,python用相同的缩进表示同级别的语句块。
3、在python中,对变量的名字大小写是敏感的(PI和pi是不同的变量)。
4、每行长度79,换行可使用反斜杠,最好使用圆括号。
5、操作符左右各加一个空格,不要为了对齐增加空格。就是各种大于小于 等于号左右加空格。
6、函数默认参数使用的赋值符左右省略空格,就是在函数中参数等号左右不要使用空格,这个可以作为特例。
7、类与类之间空两行、方法与方法之间空一行。
二、关于基本数据类型的几个有趣的小题目
1、直接口算
v = dict.fromkeys(['k1', 'k2'], []) v['k1'].append(666) print(v) v['k1'] = 777 print(v)
直接说出两次打印结果。
答案:
v = {'k1':[666],'k2':[666]} v = {'k1':777,'k2':[666]}
分析:
[]是可变数据类型,内存中k1和k2都指向同一个内存地址,只要指向的内存地址发生变化,k1和k2都要改变(保持一致),这里的k1,k2对应的值最开始都指向[]这个内存地址,而v['k1'].append(666)在[]添加了元素666,改变的是[]的第二层内存地址,k1,k2对应的值指向的第一层内存地址仍没有改变,所以k1,k2的值都变成了 [666]。
第二次打印,v['k1'] = 777,这里直接对k1的值进行重新赋值,数字是不可变数据类型,也就是说这里会改变k1对应的值的内存地址,所以这里是k1的值直接指向了新的内存地址,而k2不变。
2、求结果
v1= a=1 or 2 v2 = b=1 and 2 v3 = c=1 < (2==2) v4 = d=1<2==2 print(v1) print(v2) print(v3) print(v4)
答案
1
2
False
True
分析:
逻辑运算规则
x and y 布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。
x or y 布尔"或" - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。
not x 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。
总结:a and b ,如果a不行,那就返回这个不行的a,如果 a 和b都行则返回b。
a or b,如果a不行则跳到后面的b,这里不管b行不行,如果a行就是a。
not a就是直接取反。
分析上题:
a=1 or 2 ,or 语句,前真返回 前面的1
b=1 and 2 and语句,如果 a 和b都行则返回b即返回2
c=1 < (2==2) 先执行括号里的,2==2 结果是True, 1< true 很显然,结果是False
d=1<2==2 注意这里是链式对比,相当于1<2 and 2==2,所以是true and 2==2 ,最后的结果是True
3、(1)求结果:2 & 5
(2)求结果:2 ^ 5
(3)求结果:2 | 5
分析:这里是位运算
规则:
(1)&是位与运算符
参与运算的两个值,如果两个相应bit位相同,则结果为1,否则为0。
相同为1不同为0
(2) ^是位异或运算 参与运算的两个值,如果两个相应bit位相同,则结果为0,否则为1。 相同为0不同为1
(3)位或运算符(|) 与运算的两个值,如果两个相应bit位相同,只要有一个为1则为1,否则为0。
第一个2 & 5求值过程
2的转为二进制是 010
5的转为二进制是101
所以这两个二进制对应的bit位置,第一个是0对1,第二个是1对0,第三个是0对1,全都不同
所以结果是000,即最后的运算结果是000转为十进制还是0。
print(2 & 5) # 010 & 101 => 000 => 0
第二个2 ^ 5求值过程
2的转为二进制是 010
5的转为二进制是101
运算规则是相同为0不同为1,与上面的方法相似,他们最后运算的二进制结果是111,转为十进制为
print(2 ^ 5) # 10 ^ 101 => 111 => 1*2**0+1*2**1+1*2**2=1+2+4=7
第三个 2 | 5求值过程
2的转为二进制是 010
5的转为二进制是101
运算规则是只要有一个为1则为1,否则为0。
与上面的方法类似,最后运算的二进制结果是111,所以这里的结果还是7。
4、如何实现[‘1’,’2’,’3’]变成[1,2,3] ?
l = ['1','2','3'] res = [int(i) for i in l] print(res)
方法一 a = '1,2,3' a=a.replace(',','') res = [i for i in a] print(res) 方法二"1,2,3".split(',')