Python函数参数分类原理详解


Posted in Python onMay 28, 2020

一、参数的定义

1、函数的参数在哪里定义

在python中定义函数的时候,函数名后面的括号里就是用来定义参数的,如果有多个参数的话,那么参数之间直接用逗号,隔开

案列:

# 利用函数的参数,定义一个可以完成任意两个数相加的函数
def add_num(a,b):
  c = a + b
  print(c)

2、带参数的函数调用:

函数定义了参数,那么调用函数的时候就需要传入参数

add_num(11,22)
#运行结果
33

上面的案列中,我们定义函数的时候在函数名后面的括号里定义的参数叫做形参,

而我们调用函数的时候传入的参数叫做实参,形参是用来接收实参的。

Python函数参数分类原理详解

二、参数分类

上面我们说了形参和实参,那么形参和实参在在定义和调用的时候,根据形式不同有可以分为几类,

1、根据实参进行分类

实参:位置参数、关键字参数

1.1、位置参数(未命名参数)

def func(a,b,c):
  print(a)
  print(b)
  print(c)
  
add_num(11,22,33)
#运行结果
11
22
33

上述案列中,的函数的三个形参是按位置接收传入的实参,我们把这样的传参的形式叫做位置参数,

1.2、关键字参数(命名参数)

def func(a,b,c):
  print(a)
  print(b)
  print(c)
  
add_num(11,c=99,b=33)
#运行结果
11
33
99

调用函数函数的时候,实参通过参数名指定传给某个形参,这样的传参形式,我们把它叫做关键字参数

注意:传参的时候先写位置参数,再写命名参数

2、根据形参进行分类

形参可以分为三类:必备参数、默然参数、不定长参数

2.1、必备参数:

在调用函数的时候必须要传的参数

def add(a,b):
  c=a+b
  print(c)
add(11,22)

上面函数中的a,b就是必备参数,在调用的函数的时候必须要传,不然就会报错

2.2、默认参数(缺省参数):

调用函数的时候可以传可以不传,不传就用默认值

def func(a,b,c=99):
  print(a)
  print(b)
  print(c)
​
func(11,22,33)
print('-----------')
func(55,66)
​
#运行结果:
11
22
33
---------------
55
66
99

通过上述案列中我们可以发现,第一次调用的时候,我们传入了三个参数,c打印出来的是我们传入的值,第二次只传入了两个参数,这个时候c打印出来的是我们定义的时候给它设置的默认值

注意:带有默认值的参数一定要位于参数列表的最后面。

2.3、不定长参数*args和**kwargs

调用函数的时候可以传0个或者多个

2.3.1、*args:接收多传入的位置参数,以元祖的形式保存

def func(*args):print(args)
func(33,44,55,66,77)func(*(33,44,55,66,77))#运行结果 
(33,44,55,66,77)(33,44,55,66,77)

*args,args接收的是一个元祖;

调用的时候可以直接传入:func(33,44,55,66,77),

也可以可以先组装list或tuple,再通过*拆包传入:func(*(33,44,55,66,77));

2.3.2、**kwargs:接收多传入的关键字参数,以字典的形式保存

def func(**kwargs):
  print(kwargs)
func(e=33,h=44,f=55,d=66,c=77)
func(**{'e':33,'h':44,'d':66,'c':77})
#运行结果
{'e': 33, 'h': 44, 'f': 55, 'd': 66, 'c': 77}
{'e': 33, 'h': 44, 'f': 55, 'd': 66, 'c': 77}

**kwargs,kw接收的是一个字典;

关键字参数既可以直接传入:func(11,22,e=33,h=44,f=55,d=66,c=77),

也可以先组装dict,再通过**拆包传入:func(**{'e':33,'h':44,'d':66,'c':77})。

注意点:使用*args和**kwargs是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用python获取CPU和内存信息的思路与实现(linux系统)
Jan 03 Python
使用go和python递归删除.ds store文件的方法
Jan 22 Python
Python实现Const详解
Jan 27 Python
Python 查找字符在字符串中的位置实例
May 02 Python
windows下numpy下载与安装图文教程
Apr 02 Python
python实现ip代理池功能示例
Jul 05 Python
Python Django切换MySQL数据库实例详解
Jul 16 Python
python MultipartEncoder传输zip文件实例
Apr 07 Python
Django 允许局域网中的机器访问你的主机操作
May 13 Python
tensorflow使用L2 regularization正则化修正overfitting过拟合方式
May 22 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
Jun 18 Python
PyTorch梯度裁剪避免训练loss nan的操作
May 24 Python
pygame用blit()实现动画效果的示例代码
May 28 #Python
PyCharm中如何直接使用Anaconda已安装的库
May 28 #Python
Python内置异常类型全面汇总
May 28 #Python
python不到50行代码完成了多张excel合并的实现示例
May 28 #Python
python使用openpyxl操作excel的方法步骤
May 28 #Python
基于python实现破解滑动验证码过程解析
May 28 #Python
PythonPC客户端自动化实现原理(pywinauto)
May 28 #Python
You might like
PHP获取文件的MD5值并判断是否被修改的例子
2014/06/19 PHP
了解PHP的返回引用和局部静态变量
2015/06/04 PHP
php中Redis的应用--消息传递
2017/03/28 PHP
JS打开图片另存为对话框实现代码
2012/12/26 Javascript
在javascript中关于节点内容加强
2013/04/11 Javascript
JS控制一个DIV层在指定时间内消失的方法
2014/02/17 Javascript
jQuery控制TR显示隐藏的三种常用方法
2014/08/21 Javascript
详解AngularJS中的作用域
2015/06/17 Javascript
jQuery实现鼠标双击Table单元格变成文本框及输入内容后更新到数据库的方法
2015/11/25 Javascript
JS函数的定义与调用方法推荐
2016/05/12 Javascript
使用jQuery判断浏览器滚动条位置的方法
2016/05/30 Javascript
深入理解vue路由的使用
2017/03/24 Javascript
值得分享和收藏的xmlplus组件学习教程
2017/05/05 Javascript
详解JavaScript数组过滤相同元素的5种方法
2017/05/23 Javascript
three.js中3D视野的缩放实现代码
2017/11/16 Javascript
webpack配置打包后图片路径出错的解决
2018/04/26 Javascript
JavaScript变量基本使用方法实例分析
2019/11/15 Javascript
python如何定义带参数的装饰器
2018/03/20 Python
Django1.9 加载通过ImageField上传的图片方法
2018/05/25 Python
python实现在遍历列表时,直接对dict元素增加字段的方法
2019/01/15 Python
如何运行.ipynb文件的图文讲解
2019/06/27 Python
浅谈Python中(&,|)和(and,or)之间的区别
2019/08/07 Python
python爬虫 正则表达式解析
2019/09/28 Python
python time.strptime格式化实例详解
2021/02/03 Python
请解释一下webService? 如何用.net实现webService
2014/06/09 面试题
一份软件工程师的面试试题
2016/02/01 面试题
喝酒检查书范文
2014/02/23 职场文书
开学典礼主持词
2014/03/19 职场文书
主管竞聘书范文
2014/03/31 职场文书
关于环保的演讲稿
2014/05/10 职场文书
教师学习八项规定六项禁令思想汇报
2014/09/27 职场文书
饭店服务员岗位职责
2015/02/09 职场文书
公司年夜饭通知
2015/04/25 职场文书
幼儿园教师师德承诺书
2015/04/28 职场文书
CSS3实现的水平标题菜单
2021/04/14 HTML / CSS
解析mybatis-plus中的resultMap简单使用
2021/11/23 Java/Android