详说Python风格的函数分配参数
发布时间:2025-09-30 17:26:03

一、分配参数的定义
参数收集是指在定义函数时不能确认参数的数量,并将调用时不确定数量的实际参数存储在收集参数的元组中。相反,在定义函数形参数时,分配参数不使用星号(1或2),而是使用星号(1或2)传输多个参数。
二、使用分配参数
1.使用一个星号的分配参数
当使用一个星号的实际参数时,实际参数是一个元组、列表、字典或集合。实际参数中的元素将按参数顺序传递给函数。但由于字典的实际传输值是按键,因此不建议使用字典和集合传输值。
举例:
>>>def?cal(calmethod,number1,number2,*numbers):
print('number1=',number1,',number2=',number2,',numbers=',numbers,',calmethod=',calmethod)
>>>paras=('+',1,2,3,4)#元组分配参数传值
>>>cal(*pars)
number1=1,number2=2,numbers=(3,4),calmethod=+
>>>paras=['+',1,2,3,4]
>>>cal(*paras)#列表分配参数传值
number1=1,number2=2,numbers=(3,4),calmethod=+
>>>paras={'+',1,2,3,4}
>>>cal(*paras)#集合分配参数传值,顺序变化
number1=2,number2=3,numbers=(4,'+'),calmethod=1
>>>paras={'+':10,1:20,2:30,3:40,4:50}
>>>cal(*paras)#字典分配参数传递值,取键作为参数
number1=1,number2=2,numbers=(3,4),calmethod=+
从上面的例子可以看出,一个星号的收集参数可以通过一个星号的分配参数传递。
分配参数实际上是将实参传递的序列数据解包给相应形参的过程。
2.使用两个星号的分配参数
当使用两个星号的实际参数时,实际参数是字典。字典中的元素将按照关键字参数模式传递给函数,其中键为关键字参数,值为关键字参数对应的实际参数值。该模式要求实际参数位于参数列表的末尾。以上函数为例:
\>>>paras={'calmethod':'+','number1':1,'number2':2,'numbers':[3,4,5]}
\>>>cal(**paras)#没有预期的关键词参数'numbers'
\>>>paras={'calmethod':'+','number1':1,'number2':2,'numbers':(3,4,5)}
\>>>cal(**paras)#没有预期的关键词参数'numbers'
\>>>paras={'calmethod':'+','number1':1,'number2':2,'*numbers':(3,4,5)}
\>>>cal(**paras)#没有预期的关键词参数'*numbers'
\>>>paras={'calmethod':'+','number1':1,'number2':2}
\>>>cal(**paras)
number1=1,number2=2,numbers=(),calmethod=+
从以上案例可以看出:
1) 两个星号的参数分配不能传递两个星号的收集参数,因为没有意义。最好直接使用形状参数作为字典类型的实际参数作为字典数据。2) 分配参数模式和收集参数模式可以并存,如上述例子,但这种使用意义不大,一般不推荐使用。
下一篇 返回列表
