python解包
将序列分解为单独的变量
场景:存在一个可迭代对象,如何将其中的元素赋值给N个变量?
解包就是将一个可迭代序列拆解,python支持通过简单的赋值操作将一个可迭代对象拆解为多个单独的变量(变量个数为len(可迭代obj))
> p = (4, 5)
> x, y = p
> x
4
> y
5
>
> data = ['ACME', 50, 91,1m (2012, 12, 21)]
> name, shares, price, date = data
> name
'ACME'
> date
(2012, 12, 21)
> year, month, day = date
> year
2012
> month
12
> day
21
其实python函数返回值默认是元组,平时大家都在有意无意中使用过解包
def foo():
return 1, 2 # 等于return (1, 2)
a, b = foo() # 就是将元组(1, 2)解包
> a
1
> b
2
有时候只想得到序列中的某些值,可以使用_
占位符遗弃不需要的元素
> data = [ 'ACME', 50, 91.1, (2012, 12, 21) ]
> _, shares, price, _ = data
> shares
50
> price
91.1
解压可迭代对象赋值给多个变量
场景:怎么从可迭代对象中解压出N个对象,前提是N为可变的
python的星号表达式可以解决此问题,*
通配符可以表示任意个数的变量,*
变量已经是一个列表了,不需要list()手动转换
> iters = [1, 2, 3, 4, 5, 6, 7, 8, 9]
> first, *mid, last = iters
> first
1
> last
9
> mid
[2, 3, 4, 5, 6, 7, 8]
如果你想将解压出来的一些元素丢弃,直接使用*_
占位即可丢弃任意个数的元素
> strs = "abcdefg"
> a, *_, g = strs
> a
"a"
> g
"g"