python:关于拆包的小总结

摘要

  • python3.65
  • 拆包相关知识很多,我肯定会有疏漏,我只是想着写这篇文章,想到哪写道哪。
普通的解包

code1你还可以在c和d后面加上索引下标,这样会遍历出对应元祖中的数据

In [10]: for c,d in [(1,2),(3,4)]:
    ...:     print(c,d)
    ...: 
    
1 2
3 4

code2:字符串、元祖也一样;字典的话只会取出k,丢掉v

In [2]: a,b,c=[1,2,3]

In [3]: a,b,c
Out[3]: (1, 2, 3)

code3:因为字典的特殊性,所以你可以这样,令其以元祖的形式进行拆包

In [5]: a,b = {"a":1,"b":2}.items()

In [6]: a
Out[6]: ('a', 1)

In [7]: b
Out[7]: ('b', 2)

有趣的1:给遍历出来的数据加个下标enumerate()
In [15]: # 遍历列表,可以直接使用下标enumerate()
    ...: for index, v in enumerate([(1,2),(3,4),(5,6)]):
    ...:     print(index, v)
    ...: 
    ...: 
    ...: 
    ...: 
0 (1, 2)
1 (3, 4)
2 (5, 6)

# enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中
有趣的2:*,和 **。

先简单打点预防针
- **用于字典的解包 *用于其它(常为列表)
- 此种用法一般在传不定长参数的时候使用
- 代码量多,仅展示,不描述,仔细看展示很好看懂

code1

In [8]: a,*b,c=[1,2,3,4]

In [9]: a,b,c
Out[9]: (1, [2, 3], 4)

code2

  • 别的数据类型也是一样包括字典,但是字典也是一样,包括range()等生成器对象,如果想要了解生成器及可迭代,自行百度。
In [12]: l1=[1,2,3]

In [13]: l2=[6,7,8]

In [14]: [*l1,100,*l2]
Out[14]: [1, 2, 3, 100, 6, 7, 8]

code3

  • 请注意我用的是* 还是 **
  • 我已故意留错,异常抛出的原因是:**解包字典的时候会变成temp(d=1,e=2,f=3).
In [16]: def temp_func(a,b,c):
    ...:     print(a,b,c)
    ...: 
    ...: 

In [17]: temp_func(*{"d":1,"e":2,"f":3})
d e f

In [18]: temp_func(**{"d":1,"e":2,"f":3})
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-18-fde9338e73b6> in <module>()
----> 1 temp_func(**{"d":1,"e":2,"f":3})

TypeError: temp_func() got an unexpected keyword argument 'd'

In [19]: temp_func(**{"a":1,"b":2,"c":3})
1 2 3

总结

  • 在python中解包和传参都是很基础但是操作很玄学的知识,谦卑之心去学习。
  • 暂且这样,后续可能会补充,也可能不会。
发布了55 篇原创文章 · 获赞 3 · 访问量 2748

猜你喜欢

转载自blog.csdn.net/rusi__/article/details/102798911
今日推荐