Python-基础学习笔记(七)

来源:互联网 发布:javascript array 编辑:程序博客网 时间:2024/06/06 17:02

Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。接下来,记录一些本人自主学习Python的一些笔记:

比较、相等性和真值

== 测试值得相等性
is 测试对象的一致性

a = [1,(1,2,3)]b = [1,(1,2,3]print(a == b,a is b)     # 结果:True False# 分析:a,b值相等,但是不是同一个对象a = "123"b = "123"print(a == b,a is b)    # 结果:True True# 分析:a,b值相等,所以a == b为True.虽然a,b为两个对象,但是Python内部存储并重复使用字符串作为最佳化,实际上内存中只有一个字符串"123"a,b分享(如int,float等基本数据类型也是如此),所以a is b为True

字典的比较

字典的比较原理是根据键与值分别进行比较

dict1 = {"a":1,"b":2}dict2 = {"a":1,"b":3}print(dict1 == dict2)   # 结果Falseprint(sorted(dict1.items()) < sorted(dict2.items()))    # 结果:True

拷贝与引用

L = [1,2,3]m = [1,L,"bb"]print(L)    # [1,2,3]print(m)    # [1,[1,2,3],"bb"]L[1] = 0    print(L)    # [1,0,3]print(m)    # [1,[1,0,3],"bb"]# 此时L内部的值发生了改变,m也会跟着改变,此时就是m引用了LL = [1,2,3]m = [1,L[:],"bb"]print(L)    # [1,2,3]print(m)    # [1,[1,2,3],"bb"]L[1] = 0print(L)    # [1,0,3]print(m)    # [1,[1,2,3],"bb"]# 此时L内部的值发生了改变,而m却不会跟着改变,此时就可以称为m拷贝了L([:]代表从头到尾开始拷贝,[0:2]拷贝区间为0-2)

重复赋值

L = [1,2,3]print(L * 4)    # 结果:[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]print([L] * 4)  # 结果:[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]

扩展序列解包

通常序列赋值需要左边的变量数目与右边的值项目相等,否则将会报错。此时Python3引入了一个带*号的名称,使得左边变量的项目与右边的值项目不相等时,也不会报错,这就是扩展序列

L = [1,2,3,4]a,b,*c = Lprint(a,b,c)    # 结果:1,2,[3,4]L = [1,2]a,b,*c = Lprint(a,b,c)    # 结果:1,2,[]L = [1,2,3]a,b,*c = Lprint(a,b,c)    # 结果:1,2,[3]L = [1,2,3]a,b,*c,d = Lprint(a,b,c,d)  # 结果:1,2,[],3# 通过三组数据可以发现,无论*c有没有匹配到值,返回的都是一个列表,并且左边的数目小于右边的数目时,无论*c在什么位置,都不会赋与到值# 扩展序列解包语法不单对列表有用,对任何类型都有用a,b,*c = "123555"print(a,b,c)    # 结果:1,2,["3","5","5","5"]注:如果有多个带星号的名称,或者没有带星号的名称时变量项目与值项目不相等,都会报错。