python的收集参数以及打包、解包

python中的*和**,能够让函数支持任意数量的参数,它们在函数定义和调用中,有着不同的目的。

一,python参数的收集(打包参数-在函数定义中)

1,收集参数在函数定义时在参数前面多加一个*(星号),这个 * 可以将提供的所有值放到一个元组中!
def function(*params):
    print(params)
    
function(1,2,3,4,5,6) 

# ----output------------
1,2,3,4,5,6
2,当带*(星号)的参数位于所有参数的最后,则会收集余下参数的值
def function(name,*params):
    print(name)
    print(params)
    
function("张三",1,2,3,4,5,6) 
# ----output------------
张三
(1, 2, 3, 4, 5, 6)
3,当带*(星号)的参数不在所有的参数的末尾,调用参数时,后续参数需要用关键字指定。*(星号)是不会收集带关键字的参数的。
def function(*params,name):
    print(params)
    print(name)
    
function(1,2,3,4,5,6,name="张三") 
# ----output------------
(1, 2, 3, 4, 5, 6)
张三
4,当我们想要收集带关键字的参数时,要怎么办呢? 这样我们就要用到 **(两个星号)。 注意:用两个星号后输出的不再是元组,而是字典。
def function(**params):
    print(params)
    
function(a=1,b=2,c=3) 
# ----output------------
{'a': 1, 'b': 2, 'c': 3}
5,总结
def function(a,b,c,*params,**dicts):
    print(a,b,c)
    print(params)
    print(dicts)
    
function(1,2,3,5,6,7,x=11,y=12,z=13)
# ----output------------
1 2 3  # 1,2,3三个参数对号入座
(5, 6, 7)  # (5, 6, 7)被单星号的参数收集起来,成为一个元祖
{'x': 11, 'y': 12, 'z': 13}  # {'x': 11, 'y': 12, 'z': 13} 带关键字参数被两个星号的参数收集起来。成为一个字典。

二,python参数的解包(在函数调用中)

1,* 的作用:在函数调用中,* 能够将元组或者列表解包成不同的参数
def func(a, b, c, d):
    print(a, b, c, d)

# args = [1, 2, 3, 4]
args = (1, 2, 3, 4)  
func(*args)

# ----output------------
1 2 3 4
2,** 的作用:在函数调用中,**会以键/值的形式解包一个字典,使其成为独立的关键字参数
def func(a, b, c, d):
    print(a, b, c, d)
    
kwargs = {"a": 1, "b": 2, "c": 3, "d": 4}
func(**kwargs)

# ----output------------
1 2 3 4

猜你喜欢

转载自blog.csdn.net/TFATS/article/details/108011596