参数前的星号
单星号
1. 函数定义
在函数定义中,变量前有一个星号代表此处接收数量可变的positional参数, 并将这些参数转化为一个tuple。一般用args命名数量可变的positional参数。
例如:
def a(a,*args)
print(a)
print(args)
a(1,2,3,4)
输出:
1
(2,3,4)
2. 函数调用
在函数调用时,一个星号可以将list、tuple、dict类型的变量拆分成一个个单独的变量,分别作为函数参数。
以下为拆分list的例子:
def f(a,b,c,d):
print(c)
v = [1,2,3,4]
f(*v)
输出:
3
以下为拆分tuple的例子:
def m(a,b,c,d):
print(c)
v = (1,2,3,4)
m(*v)
输出:
3
以下为拆分dict的例子:
def m(a,b,c,d):
print(c)
print(type(c))
v1 = {
"a":1,
"b":2,
"c":3,
"d":4
}
v2 = {
1:5,
2:6,
3:7,
4:8
}
m(*v1)
m(*v2)
输出:
c
<class 'str'>
3
<class 'int'>
可见,单星号拆分dict,只能将key传入,且将key转化为对应的类型(str 或数值)。
3. 函数调用和函数定义同时使用
例如:
def m(*a):
print(a)
print(*a)
v1 = [1,2,3,4]
m(*v1)
输出:
(1,2,3,4)
1 2 3 4
双星号
1. 函数定义
在函数定义中,变量前有两个星号代表此处接收数量可变的keyword参数, 并将这些参数转化为一个dict。一般用kw(是吧?)命名数量可变的keyword参数。
例如:
def a(a,**args):
print(a)
print(args)
a(1,b=2,c=3,d=4)
输出:
1
{
"b":2,
"c":3,
"d":4
}
2. 函数调用
在函数调用时,两个星号可以将dict类型的变量拆分成单独的keyword参数。
以下为拆分dict的例子:
def f1(one=0, two=0, three=0):
print(one)
v1 = {
"one":1,
"two":2,
"three":3
}
f1(**v)
输出:
1
3. 函数调用和函数定义同时使用
例如:
def f1(**kw):
print(kw)
for i in kw.values():
print(i)
v1 = {
"one":1,
"two":2,
"three":3
}
f1(**v1)
输出:
{'one': 1, 'two': 2, 'three': 3}
1
2
3