Python 星号表达式(starred expression)
python 里面列表前面加星号, 例如 : *[1, 2, 3],这是什么用法?
1.用于参数传递
出现在函数中,*args
用于将传入的可迭代参数解析出来,并存入到args中
def f(*args, **kwargs):
print(args)
print(kwargs)
*
会将传入的参数放入名为args的元组中**
会将传入的参数放入名为kwargs的字典中
>>> def f(a, b, c):
print a, b, c
>>> f(1, 2, 3)
1 2 3
>>> f(*['a', 'b', 'c'])
a b c
>>> f(3, *[1, 2])
3 1 2
2.对向量操作
不光是列表、元组、字典,由numpy生成的向量也可以拆分。
# 作用于二维列表
array = [[1, 2, 3],
[4, 5, 6]
]
print(array)
print(*array)
print(type(array))
print(type(*array))
输出:
[[1, 2, 3], [4, 5, 6]]
[1, 2, 3] [4, 5, 6]
<class 'list'>
print(type(*array))
TypeError: type() takes 1 or 3 arguments
解释:
print(type(*array))
会报错,这是因为type的输入不是一个导致的,这也说明,*号运算符将二维列表拆成两个列表- 这么一看,这个带*变量的作用,就仿佛是把列表
解开
一层似的,而python中有一个zip
函数,功能与之相反。 zip
是将一个或多个可迭代对象进行包装压缩
,返回将结果是列表
。通俗的说:zip()压缩可迭代对象,*号解压可迭代对象。
可迭代对象才可以使用*号拆分;
array = [[1, 2, 3],
[4, 5, 6]
]
print(array)
print(*array)
print(*['ABC', 'DEF', 'GHI', 'JKL'])
print(*range(5))
print(type(range(5)))
输出:
[[1, 2, 3], [4, 5, 6]]
[1, 2, 3] [4, 5, 6]
ABC DEF GHI JKL
0 1 2 3 4
<class 'range'>
3. zip函数
>>>a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b) # 打包为元组的列表
[(1, 4), (2, 5), (3, 6)]
>>> zip(a,c) # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped) # 与 zip 相反,*zipped 可理解为解压,返回二维矩阵式
[(1, 2, 3), (4, 5, 6)]