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

一、参数收集的定义

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. 函数柯里化的意义_详解JS函数柯里化

    第一次看到柯里化这个词的时候,还是在看一篇算法相关的博客提到把函数柯里化,那时一看这个词就感觉很高端,实际上当你了解了后才发现其实就是高阶函数的一个特殊用法. 果然是不管作用怎么样都要有个高端的名字才 ...

  3. python random库生成伯努利随机数的方法_详解Python基础random模块随机数的生成

    随机数参与的应用场景大家一定不会陌生,比如密码加盐时会在原密码上关联一串随机数,蒙特卡洛算法会通过随机数采样等等.Python内置的random模块提供了生成随机数的方法,使用这些方法时需要导入ran ...

  4. python中 a or b 的值为_详解python中and和or的返回值

    在Python 中,and 和 or 执行布尔逻辑演算,如你所期待的一样,但是它们并不返回布尔值:而是,返回它们实际进行比较的值之一. 一.and:>>> 'a' and 'b' ' ...

  5. python中的str方法和repr方法_详解Python中__str__和__repr__方法的区别

    对我当前工程进行全部测试需要花费不少时间.既然有 26 GB 空闲内存,为何不让其发挥余热呢? tmpfs 可以通过把文件系统保存在大内存中来加速测试的执行效率. 但优点也是缺点,tmpfs 只把结果 ...

  6. python中文件打开的合法模式组合_详解python中各种文件打开模式

    在python中,总的来说有三种大的模式打开文件,分别是:a, w, r 当以a模式打开时,只能写文件,而且是在文件末尾添加内容. 当以a+模式打开时,可以写文件,也可读文件,可是在读文件的时候,会发 ...

  7. python不是内部或外部命令的解决方法_详解python常见报错--NO MODULE NAMED _SQLITE3解决方法...

    概述 在安装一些基于python的程序时,经常遇到"ImportError: No module named _sqlite3"问题. 下面记录下解决方法. 解决办法 1.编译sq ...

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

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

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

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

  10. pythonnamedtuple定义类型_详解Python中namedtuple的使用

    namedtuple是Python中存储数据类型,比较常见的数据类型还有有list和tuple数据类型.相比于list,tuple中的元素不可修改,在映射中可以当键使用. namedtuple: na ...

最新文章

  1. Linux C连接Mysql
  2. matlab 度分秒转换成度_如何利用matlab统一处理照片亮度对比度
  3. matplotlib 旋转刻度_Matplotlib数据可视化:文本与坐标轴
  4. python实现蜘蛛功能批量下载手机壁纸
  5. contourf参数 python_Python机器学习(六)
  6. BufferedInputStream的read()方法源码解析
  7. c语言混响,混响也是大学问,c与数字混响的区别-文章-数字音视工程网DAV01.COM...
  8. Windows 10 修改网络名字
  9. C++list容器实现按照年龄升序排列,年龄相同按照身高降序排列,年龄身高相同对体重升序排列
  10. 调试Javascript代码(浏览器F12)
  11. html 字体思源_CSS font-family 各字体一览表
  12. 《数据挖掘概念与技术》第三版 范明 孟小峰译 课后习题答案(二)
  13. json与对象互转:json转实体类、实体类转json、json转List、List转json
  14. 求解-----组合优化问题
  15. FTP上传和WEB上传的区别
  16. javascript中数据类型转换为Number
  17. php theexcerpt,WordPress获取文章摘要函数the_excerpt详解
  18. 技术负责人如何搞定老板之我所见
  19. <urlopen error [Errno 104] Connection reset by peer>
  20. Android-vold源码分析之连接电脑OTG(11)

热门文章

  1. R语言广义线性模型Logistic回归模型C Statistics计算
  2. Windows下R语言环境安装
  3. NLP文本生成模型数据准备及实战
  4. Linux grep 命令
  5. 学习python(五)
  6. SNV分析软件/工具
  7. python debug 调试工具 pysnooper
  8. 【文本分类】Convolutional Neural Networks for Sentence Classification
  9. LeetCode 905 Sort Array By Parity--Java stream,Python lambda表达式一行 解法
  10. 计算机毕业论文过程管理手册,毕业论文过程管理手册(修改)-陈亚琴.doc