python易错细节整理
内容来自于b站视频BV1Vd4y1g7gX,up主为@啥都会一点的研究生
1.容器操作很多都没有返回值
错误用法
case1=[9,8,7,3,2,2]
case1 = case1.append(1)
print(case1)
None
正确用法
case1=[9,8,7,3,2,2]
case1.append(1)
print(case1)
类似的还有clear, insert, sort, reverse, remove, extend
2.可变序列遍历时修改,应该用列表推导式
错误用法
目的是将列表中的偶数过滤,可是还剩了一个8是为什么呢?
原因是遍历时i增加,但remove之后后面的数都被往前移动了一位(因此remove的复杂度O(n))
>>> case2 = [9, 8, 8, 3, 3, 1]
>>> for i in case2:
>>> if i % 2 == 0:
>>> case2.remove(i)
>>> print(case2)
[9, 8, 3, 3, 1]
正确用法
可变序列遍历时修改,应该用列表推导式
case2=[9,8,8,3,3,1]
case3 [x for x in case2 if x 2 !0]
print(case3)
3.两个字符串常量用空格连接表示字符串合并
case3 = ['a',
'b'
'c',
'd',
'e']
print(len(case3))
4
上面缺了个逗号,但不报错,效果相当于 ‘b’+‘c’,字符被合并了
4.tuple只有一个元素要在末尾加逗号
当你想实现在不可变对象元组中仅添加一个可变对象字符串,在末尾加逗号
>>> isinstance(('bilibili'), tuple)
>>> isinstance(('bilibili',), tuple)
False
True
5.if-else表达式优先级高于逗号
有时候我们会把
flag = False
if flag:
X,y = 10,10
else:
X,y = None,None
print(x,y)
改成
>>> x, y = (10, 10) if True else None, None
>>> x
(10, 10)
>>> y
None
但是X,y的值非我们所愿
原因在于if-else表达式优先级高于逗号,我们要在后面加括号
x,y =(10,10)if flag else (None,None)