文章目录
大家好,我是 👉 【Python当打之年(点击跳转)】
本期整理了几个基础python防坑小常识,希望对大家有所帮助。
🏳️🌈 1. 链式运算
(False == False) in [False] # makes sense
# False
False == (False in [False]) # makes sense
# False
False == False in [False] # why?
# True
True is False == False
# False
False is False is False
# True
注: 参考常见链式运算:1<5<10
🏳️🌈 2. is 运算符
a = 256
b = 256
a is b
# True
a = 257
b = 257
a is b
# False
a, b = 257, 257
a is b
# True
注: python中经常使用的一些数值定义为小整数池,小整数池的范围是[-5,256],python对这些数值已经提前创建好了内存空间,即使多次重新定义也不会在重新开辟新的空间,但是小整数池外的数值在重新定义时都会再次开辟新的空间,不同编辑器不同平台可能会有所不同。
🏳️🌈 3. all() 函数
all([True, True, True])
# True
all([True, True, False])
# False
all([])
# True
all([[]])
# False
all([[[]]])
# True
注: all() 函数用于判断给定的可迭代参数 iterable 中的所有元素是否都为True,如果是返回 True,否则返回 False,元素除了是 0、空、None、False 外都算 True,函数等价于:
def all(iterable):
for element in iterable:
if not element:
return False
return True
🏳️🌈 4. 列表移除元素
list_1 = [1, 2, 3, 4]
list_2 = [1, 2, 3, 4]
list_3 = [1, 2, 3, 4]
list_4 = [1, 2, 3, 4]
for idx, item in enumerate(list_1):
del item
for idx, item in enumerate(list_2):
list_2.remove(item)
for idx, item in enumerate(list_3[:]):
list_3.remove(item)
for idx, item in enumerate(list_4):
list_4.pop(idx)
# list_1 -- [1, 2, 3, 4]
# list_2 -- [2, 4]
# list_3 -- []
# list_4 -- [2, 4]
注: 列表的移除操作会改变原列表元素的索引。
🏳️🌈 5. + and +=
a = [1, 2, 3, 4]
b = a
a = a + [5, 6, 7, 8]
# a -- [1, 2, 3, 4, 5, 6, 7, 8]
# b -- [1, 2, 3, 4]
a = [1, 2, 3, 4]
b = a
a += [5, 6, 7, 8]
# a -- [1, 2, 3, 4, 5, 6, 7, 8]
# b -- [1, 2, 3, 4, 5, 6, 7, 8]
注: a = a + [5,6,7,8] 创建了一个新列表,a += [5,6,7,8] 扩展了原列表。
🏳️🌈 6. sorted/reversed
x = 1, 2, 3
sorted(x) == x
# False
sorted(x) == sorted(x)
# True
y = reversed(x)
sorted(y) == sorted(y)
# False
注: sorted 方法返回的是一个list,reversed 方法返回的是一个iterator。
🏳️🌈 7. **
False ** False == True
# True
False ** True == False
# True
True ** False == True
# True
True ** True == True
# True
注: True, False 转换为 1,0。
🏳️🌈 8. 列表/字典更新
some_list = [1, 2, 3]
some_dict = {
"key_1": 1,
"key_2": 2,
"key_3": 3
}
some_list = some_list.append(4)
some_dict = some_dict.update({"key_4": 4})
print(some_list)
# None
print(some_dict)
# None
注: 列表、字典的更新都是就地修改对象并返回None,以提高性能。
🏳️🌈 9. 可变对象/不可变对象
def func1(a):
if a[0] == 0:
return
a[0] -= 1
func1(a)
return a
def func2(a):
if a == 0:
return a
a -= 1
func2(a)
return a
print(func1([3, 1]))
# [0, 1]
print(func2(3))
# 2
注: 可变对象(如list)可以在函数中被改变,而对不可变对象(a -= 1)的重新赋值并不是对值的改变。
🏳️🌈 10. 猜一猜
a, b = a[b] = {}, 1
print(a)
# {1: ({...}, 1)}
print(b)
# 1
a[b][0] is a
# True
参考: https://docs.python.org/3/reference/simple_stmts.html#assignment-statements
🏳️🌈 更多技巧:
【源码下载 | Python可视化系列文章资源(源码+数据)】
以上就是本期为大家整理的全部内容了,赶快练习起来吧,原创不易,喜欢的朋友可以点赞、收藏也可以分享(注明出处)让更多人知道。