Python基础:关于星号元组*args和双星号字典**kwargs作为实参的使用总结

许多初学者或Python爱好者可能都遇到过用星号元组*args和双星号字典**kwargs作为实参来使用的困惑,这里本人举了几个小例子来阐述一下总结心得。

1. 星号元组*args传参,如

def fn(a,b,c,d):
	    print(a,b,c,d)
		return
tup = (5,6,7,8)
fn(*tup)

输出结果:5 6 7 8

上述将变量tup,加上*作为实参传入函数中后,即依次对应着形参列表进行赋值,实质上是位置传参,如果形参数量与元组内元素数量不符,则会报数量不匹配的错误。

如果是下面方式定义函数的形参列表,则不会有上述的错误产生~想怎么传参就怎么传参!

def fn(*args):
    print(args)
   return
tup = (1,2,3,4,5,6,7)
fn(*tup,1,2,3,4,)

输出结果:	(1, 2, 3, 4, 5, 6, 7,1,2,3,4)

# 1. 双星号字典kwargs传参,如**

def fn(a,b,c,d):
    print(a,b,c,d)
    return
dic = {
    'a':5,
    'b':6,
    'c':7,
    'd':8,
}
fn(**dic)

输出结果:5 6 7 8
上述将变量dic,加上**作为实参传入函数中后,即依次对应着形参列表进行赋值,实质上为关键字传参,如果形参数量与元组内元素数量不符,则会报数量不匹配的错误。

同理:如果是下面方式定义函数的形参列表,则不会有上述的错误产生~想怎么传参就怎么传参!

def fn(**kwargs):
    print(kwargs)
    return
dic = {
    'a':5,
    'b':6,
    'c':7,
    'd':8,
}
fn(**dic,e=1,f=2)

输出结果:{‘a’: 5, ‘b’: 6, ‘c’: 7, ‘d’: 8, ‘e’: 1, ‘f’: 2}
注意:实参若挨个传输,必须为关键字传参的形式,且关键字变量名不可重复,如fn(**dic,a=1),这样传参就会报错,因为出现了2个a变量。

结论:星号元组和双星号字典的传参方式,可以理解为在普通的元组或者字典变量名前加‘’*‘’或者“**”,并赋予了该变量名特殊的功能:

1.若该特殊变量出现在形参列表中,则会将传入的变量中符合条件的元素纳入到该特殊变量中。 2.若该特殊变量出现在实参列表中,则会将其中的元素拆分成对应元素,并可以被形参列表中的参数获取

以上仅为个人观点,若有疏漏,请各位指点!

你可能感兴趣的:(Python基础)