函数的参数使用除了常规的位置参数和关键字参数外,还支持可变个数的函数参数,这种支持可变个数的参数方法称为参数收集,对应的参数称为收集参数。

一、参数收集的定义

Python的函数支持可变不定数量的参数模式,这种将不定数量实参在调用时传递给函数,函数将其识别并保存到指定形参的过程称为参数收集:

1、带一个星号的参数收集模式

这种模式是在函数定义时在某个形参前面加一个星号,调用时按位置匹配不带星号的形参和实参,多余的实参都将作为一个元组的元素保存到星号对应的形参中,该星号后的形参就称为收集参数。

这种模式的参数收集过程与前面介绍的序列解包类似,只是序列解包是将序列中多出的部分存放到星号后面的列表变量,而函数收集是将多出的参数存放到收集参数对应的元组变量。这种模式的参数收集与序列解包类似,收集参数最好是最后一个形参,但可以出现在函数参数的任何位置,只是此时该参数后面的参数在调用时必须用关键字参数模式传值,否则这些实参值都将作为收集参数的一部分。

举例:我们来实现一个计算函数,其终极目标是输入一串不限数量的数字,然后调用对应的运算符进行连续运算(如连加、连减、连乘等)。为了突出重点,我们在最初的例子只是定义这个函数并输出参数值,以来验证上面相关描述对于形参和实参的取值方法。后面章节再来完整实现该函数。

函数定义:>>> 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中参数前面加星号是什么意思_详解Python函数中参数带星号是什么意思相关推荐

  1. python定义类方法用来计算整数的减法运算_详解python的二元算术运算,为什么说减法只是语法糖?...

    原标题:详解python的二元算术运算,为什么说减法只是语法糖? 原题 | Unravelling binary arithmetic operations in Python 作者 | Brett ...

  2. python中列表和元组的相同点和不同点_详解Python语言中元组和列表的区别

    本篇介绍Python中的元组数据类型,文中会讨论元组与列表的区别,元组的声明.赋值及其相关运算.通过本篇的学习,可以达成如下目标. ● 掌握元组和列表的区别 ● 掌握元组的声明和赋值 ● 掌握适用于元 ...

  3. python中集合的元素可以是任意数据类型_详解Python集合数据类型

    本篇介绍Python集合数据类型.集合不同于列表和元组类型,集合存储的元素是无序且不能重复的,同数学中的集合一样,集合可以执行集合的并.交.差运算.通过本篇的学习,可以达成如下目标. ● 掌握集合数据 ...

  4. python归一化后全部都是0咋办_详解python实现数据归一化处理的方式:(0,1)标准化...

    在机器学习过程中,对数据的处理过程中,常常需要对数据进行归一化处理,下面介绍(0, 1)标准化的方式,简单的说,其功能就是将预处理的数据的数值范围按一定关系"压缩"到(0,1)的范 ...

  5. Python中常见的__init__.py是什么意思?详解Python import的方式和原理

    Python中常见的__init__.py是什么意思?详解Python import的方式和原理 1 什么是模块化编程? 2 __init__.py文件的作用 3 Python如何import第三方库 ...

  6. 详解 js 函数中的 arguments

    详解 js 函数中的 arguments 1.什么 arguments 简单来说:arguments 是一个对应于传递给函数的参数的类数组对象 arguments 对象是所有(非箭头)函数中都可用的局 ...

  7. python函数中可变参数的传递方式是_详解Python函数可变参数定义及其参数传递方式...

    Python函数可变参数定义及其参数传递方式详解 python中 函数不定参数的定义形式如下 1. func(*args) 传入的参数为以元组形式存在args中,如: def func(*args): ...

  8. python中什么是可变参数_详解Python的三种可变参数

    详解Python的三种可变参数 可变参数 可变参数应该最简单,在C/C++和Java等语言中都有,就是用*号来表示,例如 def testArg(*arg) 你可以传入任意多个元素(包括0)到参数中, ...

  9. python函数中可变参数的传递方式_详解Python函数可变参数定义及其参数传递方式...

    Python函数可变参数定义及其参数传递方式详解 python中 函数不定参数的定义形式如下 1. func(*args) 传入的参数为以元组形式存在args中,如: def func(*args): ...

最新文章

  1. WordCount案例
  2. LibreOJ 6279 数列分块入门 3(分块+排序)
  3. 【干货】接地气的产品设计流程
  4. 重磅!吴恩达、林轩田公开课交流群正式成立啦
  5. [图解]小白都能看懂的FASTER R-CNN – 原理和实现细节
  6. 使用Hibernate(JPA)一键式删除
  7. 园林系统优秀党员推荐材料_园林绿化公司党员先进个人事迹材料
  8. linux上ln命令详细说明
  9. 平台用户实名认证设计流程
  10. 递归与递推类型题小结
  11. 【QT】QT从零入门教程(七):图像适应窗口
  12. 2021下半年河南郑州普通话测试报名入口
  13. 2007左右美国程序员工资大概样子
  14. 手机自动休眠与距离感应器失效的问题
  15. 【pwnable.kr】Toddler‘s Bottle-[collision]
  16. 华三模拟器HCL文件打开/导入失败解决方法
  17. 《最新开源 随插即用》SAM 自增强注意力深度解读与实践(附代码及分析)
  18. excel和matlab交互,Excel与Matlab的数据交互(精选5篇)
  19. M91A人脸识别布控球机人脸AI视频分析功能
  20. Codeforces 1255B Fridge Lockers

热门文章

  1. UDP/TCP实时传输图像
  2. 记一次钓鱼邮件分析过程
  3. 谷歌浏览器chrome扩展插件-农名的世界脚本
  4. excel统计类别个数
  5. 苹果receipt例子
  6. Hbase HBCK2
  7. 微信公众号回复服务器参数错误,为什么微信文章网址在浏览器访问提示参数错误...
  8. 截部分陈宏对用线段树解矩形并的轮廓(picture 问题的深入讨论)
  9. 再谈计算机编程的学习
  10. 火影忍者精剪版 纯战役没有回忆