定义函数

我们可以定义一个实现自己想要的功能的函数。Python定义函数以def开头,定义函数基本格式如下:

def 函数名 (参数列表):"函数_文档字符串"函数体
return 表达式

基于上述格式,下面对函数定义的规则进行说明:

  1. 函数代码块以def开头,后面紧跟的是函数名和圆括号()。
  2. 函数名的命名规则跟变量的名字是一样的,即只能是字母、数字和下划线的任何组合,但不能以数字开头,并且不能跟关键字重名。
  3. 函数的参数必须放在圆括号中。
  4. 函数的第1行语句可以选择性地使用文档字符串来存放函数说明。
  5. return表达式结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回None。

需注意的是,如果参数列表包含多个参数,默认情况下,参数值和参数名称是按参数声明中定义的顺序匹配的。

不定长参数

通常在定义一个函数时,若希望函数能够处理的参数个数比当初定义的参数个数多,此时可以在函数中使用不定长参数。其基本的语法格式如下:

def 函数名([formal_args, ] *args, **kwargs):"函数_文档字符串"函数体return 表达式

上述格式中,函数共有3个参数。其中,formal_args作为传统定义的参数,*args和**kwargs为不定长参数。当调用函数的时候,函数传入的参数个数会优先匹配formal_args参数的个数。如果传入的参数个数和formal_args参数的个数相同,不定长参数会返回空的元组或字典;如果传入参数的个数比formal_args参数的个数多,可以分为如下两种情况:

加了*的变量args会存放所有未命名的变量参数,args为元组;而加**的变量kwargs会存放命名参数,即形如key=value的参数, kwargs为字典。如果传入的参数指定了名称,如m = 1,那么**kwargs会以字典的形式存放这些被命名的参数,如{m : 1}。

为了大家更好的理解,先通过一个简单的案例进行演示。

def test(a,b,*args):print(a)print(b)print(args)test(11,22)

1~4行代码定义了test函数。其中,args为不定长参数。当在第5行中调用test函数时,如果传入11和22这两个数,那么这两个数会从左向右依次匹配test函数定义时的参数a和b,此时,args参数没有接收到数据,所以为一个空元组。

运行结果:

如果在调用test函数时,传入多个参数(这里指的是大于2个参数),情况又是怎么样的呢?

def test(a,b,*args):print(a)print(b)print(args)test(11,22,33,44,55,66,77,88,99)

运行结果:

如果在列表末尾使用**表示参数,代码如下:

def test(a,b,*args,**kwargs):print(a)print(b)print(args)print(kwargs)test(11,22,33,44,55,66,77,88,99)

运行结果:

从上述结果可知,如果再调用test函数时传入多个数值,这些数值会从左向右依次匹配函数test定义时的参数,如果传统的参数匹配够了,多余的参数会组成一个元组,和不定长参数args进行匹配。

思考一下,在调用函数时,什么情况下传入的数据会匹配参数kwargs呢?将前面调用函数的代码进行修改:

def test(a,b,*args,**kwargs):print(a)print(b)print(args)print(kwargs)test(11,22,33,44,55,66,77,m = 88,n = 99)

运行结果:

综上所述,不定长参数传递的个数可以大于定义函数时的参数数目。如果传入的参数没有名字,那么传入的值给args变量;如果传入的参数有名字,那么传入的值会给kwargs变量。

人生苦短,我用Python。

Life is short, use Python.

python 不定参数_人生苦短,我学不会Python。——函数中不定长参数的写法相关推荐

  1. python词云图_人生苦短我用Python——词云图的绘制

    1.wordcloud库的安装 wordcloud库可以绘制词云,安装wordcloud库: pip install wordcloud 2.wordcloud库的介绍 wordcloud库的基本使用 ...

  2. python ssl recv参数_如何在paramiko.recv函数中接收大输出?

    我需要从paramiko中的.recv函数接收完整的输出.我试图增加nbyte数,但在我看来,我认为这不是正确的方法.脚本的主要用途是在同一会话中自动列出命令. 我这里的主要问题是我不能从shell接 ...

  3. python关键字参数必须位于位置参数之前_python函数中的参数(关键字参数,默认参数,位置参数,不定长参数)...

    默认参数:定义函数的时候给定变量一个默认值. def num(age=1): 位置参数:调用函数的时候根据定义函数时的形参位置和实参位置进行引用. 关键字参数:如果定义的函数中含有关键字参数,调用函数 ...

  4. python 函数调用 不允许关键字参数_你所不知道的Python|函数参数的演进之路

    原标题:你所不知道的Python|函数参数的演进之路 函数参数处理机制是Python中一个非常重要的知识点,随着Python的演进,参数处理机制的灵活性和丰富性也在不断增加,使得我们不仅可以写出简化的 ...

  5. python获取命令行参数_【整理】Python中如何获得并处理命令行参数

    运行Python脚本时,时常需要从命令行中传递一些参数到Python程序中,但是如何获得相应的传递进来的参数,以及如何解析这些参数,是很多人,包括最开始的我,所遇到的问题. 下面,就对此总结一下: 先 ...

  6. python中打开文件时只允许写入的模式是_在open函数中访问模式参数使用()表示打开一个文件只用于写入。(4.0分)_学小易找答案...

    [单选题]溢流坝属于( ) [单选题]在重力坝的底部沿坝轴线方向设置大尺寸的空腔,即为( ) [单选题]模式()的用途是打开一个文件用于追加.如果该文件已存在,文件指针将会放在文件的结尾.(4.0分) ...

  7. 人生苦短我用python壁纸_人生苦短我用Python分分钟下载知乎美图给你看

    为什么说"人生苦短,我用python"? 为什么说人生苦短我用python Question 1 Python是什么 2 人们为什么用Python 3 Python是脚本语言吗 P ...

  8. 编程猫python笔试题_假如高考考python编程,这些题目你会几个呢?

    Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定.它包含了一组完善而且容易理 ...

  9. python编程基础_月隐学python第2课

    python编程基础_月隐学python第2课 学习目标 掌握变量的输入和输出 掌握数据类型的基本概念 掌握算数运算 1.变量的输入和输出 1.1 变量输入 使用input输入 input用于输入数据 ...

  10. [转载] 详细介绍Python函数中的默认参数

    参考链接: Python函数中的默认参数 详细介绍Python函数中的默认参数 import datetime as dt def log_time(message, time=None): if t ...

最新文章

  1. ip地址开头结尾不能为0
  2. python3编码和解码_python3的url编码和解码,自定义gbk、utf-8的例子
  3. maven netty 配置_SpringBoot整合Netty(附源码)
  4. Android中DatePicker日期选择器的使用和获取选择的年月日
  5. 获取ntoskrnl的基址
  6. Oracle 创建主键自增表
  7. leetcode 525. Contiguous Array | 525. 连续数组(Java)
  8. jMeter Transaction Controller 学习笔记
  9. 如何计算机械人工作量,修订后太原理工大学本科教学工作量计算办法
  10. 蓝桥杯 基础练习 数的读法
  11. 【Python笔记】datetime 模块用法
  12. 运行中的linux备份系统盘,怎样使用ghost对linux进行系统备份?
  13. Eclipse srever起来时,时间超过45s。
  14. linux中unzip命令无法使用解决方法
  15. gazebo中计算理想相机模型的fx fy
  16. PAT 1082 射击比赛
  17. Android 系统应用开发实战
  18. 关于H5请求数据报跨域问题记录
  19. 扫码枪回车键条码_条码扫描枪怎么设置换行?
  20. MAX31865模块PT100两线制测温

热门文章

  1. android编译modem,android modem调试的一点点心得
  2. 创建font_使用CSS3 CubicBezier创建动画链接悬停效果
  3. 富文本编辑器中空格转化为a_熙态农业:富硒鸡蛋有什么营养价值?
  4. en60204标准_工业机械一般办理CE认证的标准
  5. 纸板怎么切割光滑_现有的切割机如何选择呢?进来看看就清楚了
  6. ftp linux 服务器 麒麟_麒麟系统安装ftp
  7. 鸢尾花分类_基于鸢尾花(iris)数据集的逻辑回归分类实践
  8. android华为指纹开发_2020指纹芯片行业市场调研分析报告
  9. linux中脚本循环语句,Shell脚本循环语句
  10. 校园网未能找到pppoe服务器6,校园网PPPOE接入认证系统的研究与实现.doc