本期整理了几个基础python防坑小常识,希望对大家有所帮助。
(False == False) in [False] # makes sense
# False
False == (False in [False]) # makes sense
# False
False == False in [False] # why?
# TrueTrue is False == False
# False
False is False is False
# True
注: 参考常见链式运算:1<5<10
a = 256
b = 256
a is b
# Truea = 257
b = 257
a is b
# Falsea, b = 257, 257
a is b
# True
注: python中经常使用的一些数值定义为小整数池,小整数池的范围是[-5,256],python对这些数值已经提前创建好了内存空间,即使多次重新定义也不会在重新开辟新的空间,但是小整数池外的数值在重新定义时都会再次开辟新的空间,不同编辑器不同平台可能会有所不同。
all([True, True, True])
# True
all([True, True, False])
# Falseall([])
# 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 Falsereturn True
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 itemfor 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]
注: 列表的移除操作会改变原列表元素的索引。
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] 扩展了原列表。
x = 1, 2, 3sorted(x) == x
# Falsesorted(x) == sorted(x)
# Truey = reversed(x)
sorted(y) == sorted(y)
# False
注: sorted 方法返回的是一个list,reversed 方法返回的是一个iterator。
False ** False == True
# True
False ** True == False
# True
True ** False == True
# True
True ** True == True
# True
注: True, False 转换为 1,0。
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,以提高性能。
def func1(a):if a[0] == 0:returna[0] -= 1func1(a)return adef func2(a):if a == 0:return aa -= 1func2(a)return aprint(func1([3, 1]))
# [0, 1]
print(func2(3))
# 2
注: 可变对象(如list)可以在函数中被改变,而对不可变对象(a -= 1)的重新赋值并不是对值的改变。
a, b = a[b] = {}, 1print(a)
# {1: ({...}, 1)}print(b)
# 1a[b][0] is a
# True
参考: https://docs.python.org/3/reference/simple_stmts.html#assignment-statements
【源码下载 | Python可视化系列文章资源(源码+数据)】
以上就是本期为大家整理的全部内容了,赶快练习起来吧,原创不易,喜欢的朋友可以点赞、收藏也可以分享(注明出处)让更多人知道。