从今天开始,新开一个系列,我准备把学习Python cookbook这本书的代码自己敲一遍,加深理解和了解Python的库带的一些方法。
因为现实情况,现在很少能有时间看实体书。所以这个系列的学习资料全部参考这个文档。 https://python3-cookbook.readthedocs.io/zh_CN/latest/c01/p01_unpack_sequence_into_separate_variables.html
感谢大佬们的翻译和付出。
以后不出意外的话不知道更新什么,就会更新Python相关的基础知识。
1.1的内容是:将序列分解为单独的变量
- 一般来说,我们使用下面的方式进行给变量赋值。
a = 3
b, c = 4, 5
if __name__ == '__main__':
print(a, b, c)
#值分别为 3,4,5
假如我们要赋的值在一个列表里,有个列表list1 = [100,200,300] 我想把 300的值赋给d。我想我们肯定会想到 d = list1[2] 这种办法。 那么新的问题来了。我想把这个列表的值分别赋给3个变量a b c。我总不能傻傻的写 a=list[0],b=list[1],c=list[2]吧。
知识点来了:是可迭代对象可以通过一个简单的赋值操作来分解为单独的变量。 前提就是变量的总数和结构必须与可迭代的对象相吻合。
那么在这里,我们可以使用 a,b,c =list1
即可实现需求。
Python里的可迭代对象一般包括:字符串,列表,元组,集合,字典等 ,如果你不确定你的对象是否可迭代。那么可以使用内置方法hasattr 来判断,也可以使用 collections.abc 的 Iterable 来判断是否是可迭代
代码语言:javascript复制from collections.abc import Iterable
if __name__ == '__main__':
print(isinstance('abc',Iterable)) #字符串
print(isinstance([],Iterable)) #列表
print(isinstance({},Iterable)) #字典
print(isinstance({1,2,3},Iterable)) #集合
print(isinstance((1,),Iterable)) #元组
##以上结果均为True
很多时候, 我们可能只需要其中的一个值,这时候如果采用这种方法的话,我们就可以使用一个占位的变量就可以啦。反正 这种_ 变量在业务里不要使用即可。
代码语言:javascript复制 data = ['张三','lisi','wangwu']
_,a,_ = data
print(a) #lisi
代码语言:javascript复制 data = ['hello1','hello2','hello3']
a ,b ,c ,d =data #报错 ValueError: not enough values to unpack (expected 4, got 3)
a , b = data #报错ValueError: too many values to unpack (expected 2)
不错,学到了!