在Python学习中,简单总结一下“*”的多种使用方法。
基本用法
乘法&乘方
用于数学计算
a = 5
# 乘法
print(a*2) # 10
# 乘方
print(a**2) # 25
字符串复制
s = 'abc'
# 复制3次
print(s*3) # abcabcabc
序列解包
x,*y = 1,2,3,4
print(x) # 1
print(y) # [2,3,4],这里y做为一个列表,收集剩余项
x,*y,z = 1,2,3,4
print(x) # 1
print(y) # [2,3],这里y,收集中间两项
print(z) # 4
x,*y,z = 1,4
print(x) # 1
print(y) # [],这里y是一个空的列表
print(z) # 4
在定义函数时,用于参数收集
单个“*” 收集参数,生成一个元组
def foo(*args):
print(args)
foo(1,2,3,4)
# 打印结果,说明args是一个元组
(1, 2, 3, 4)
两个“*” 收集参数,生成一个字典
def bar(**kwargs):
print(kwargs)
bar(x=1,y=2,c=3)
# 打印结果,说明kwargs是一个字典
{'x': 1, 'y': 2, 'c': 3}
注意foo,bar传参时的不同
同时使用“*”和“**”
同时使用要注意先后顺序。
def foo(*args, **kvargs):
print(args)
print(kvargs)
foo(1,2,3,x=3,y=4,z=[1,2,3])
# 打印结果
# 1,2,3被args收集为元组
(1, 2, 3)
# x,y,z被kvargs收集为字典
{'x': 3, 'y': 4, 'z': [1, 2, 3]}
在调用函数时,用于参数解包
单个“*”用于“分解”元组,列表
a = (111,222)
b = [123,456]
def foo(x,y):
print(x, y)
foo(*a) # 111 222
foo(*b) # 123 456
两个“**”,用于“分解”字典
d = {'x':1,'y':2}
def foo(x,y):
print(x, y)
foo(**d) # 1 2
小结
- “*”和“**”在函数定义时出现,用于收集参数;在函数调用时出现用于分解参数
- “*”用于处理元组、列表;“**”用于处理字典(两个星号正好对应字典的key,value)。