除了常规的位置参数和关键字参数外,函数参数还支持可变数量的函数参数。这种支持可变数量参数的方法称为参数集合,对应的参数称为集合参数。
一、参数收集的定义
Python 的函数支持可变和不定数量的参数模式。这种在调用时将不定数量的实参传递给函数,并由函数识别并保存到指定的形参的过程称为参数集合:
1、带一个星号的参数收集模式
该模式是在定义函数时在形参前加星号,调用时将形参和不带星号的实参按位置匹配,多余的实参会作为元组的元素保存到星号 星号对应的形参中,星号后面的形参称为集合参数。
该模式的参数收集过程与上面介绍的序列解包类似,只是序列解包将序列的额外部分存储在星号后面的列表变量中,而函数集合将额外的参数存储在集合参数中对应元组变量。这种模式下的参数收集类似于序列解包。收集的参数最好是最后一个形参,但可以出现在函数参数的任何位置,但调用时必须以关键字参数方式传递参数后面的参数。 value,否则这些参数值将成为集合参数的一部分。
示例:我们来实现一个计算函数,其最终目标是输入无限个数,然后调用相应的算子进行连续运算(如连续加法、连续减法、连续乘法等)。为了突出重点,我们只是定义了这个函数,并在初始示例中输出了参数值,以验证上述形式参数和实际参数的取值方法。该功能将在后面的章节中全面实现。
函数定义:
\>>> def cal(number1,number2=None,*numbers,calmethod='$'):
print('number1=',number1,',number2=',number2,',numbers=',numbers,', calmethod=',calmethod)
函数调用执行:
\>>> cal(1,'+')
number1= 1 ,number2= + ,numbers= () , calmethod= $
\>>> cal(1,2,'+')
number1= 1 ,number2= 2 ,numbers= ('+',) , calmethod= $
\>>> cal(1,2,3,'+')
number1= 1 ,number2= 2 ,numbers= (3, '+') , calmethod= $
\>>> cal(1,2,3,4,'+')
number1= 1 ,number2= 2 ,numbers= (3, 4, '+') , calmethod= $
\>>> cal(1,calmethod='+')
number1= 1 ,number2= None ,numbers= () , calmethod= +
\>>> cal(1,2,calmethod='+')
number1= 1 ,number2= 2 ,numbers= () , calmethod= +
\>>> cal(1,2,3,calmethod='+')
number1= 1 ,number2= 2 ,numbers= (3,) , calmethod= +
\>>> cal(1,2,3,4,calmethod='+')
number1= 1 ,number2= 2 ,numbers= (3, 4) , calmethod= +
\>>>
执行截图如下:
2、带两个星号的参数收集模式
第一种方式的采集参数不能采集关键字参数传递的实际参数。要收集关键字参数传递的实际参数,需要在收集参数前使用两个星号。此时,集合参数对应的是字典而不是元组。
这种模式的集合参数必须放在函数的末尾,因为关键字参数的函数参数后面不允许有非关键字参数。本例中的关键字形参的形参名不是上一节介绍的函数定义中的关键字形参名,而是在调用实参时以关键字形参的形式传递的不定数量的参数。两种模式的采集参数可以混合使用。
\>>> def cal(calmethod='+',*topnopers,**lastnopers):
print('运算符=',calmethod,',前几个运算参数为=',topnopers,',最后几个运算参数=',lastnopers)
\>>> cal('+',1,2,3,4,n5=5,n6=6,n7=7)
运算符= + ,前几个运算参数为= (1, 2, 3, 4) ,最后几个运算参数= {'n5': 5, 'n6': 6, 'n7': 7}
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 什么是 python 正则表达式中的分组12/08
- ♥ 码如其人,同学你能写一手漂亮的Python函数吗01/22
- ♥ python冒泡排序算法的性能探索11/02
- ♥ python特有的方法有哪些11/25
- ♥ Python使用loguru操作日志11/23
- ♥ python如何保存生成的图片?08/18
内容反馈