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寻找list中最大值、最小值并返回其所在位置的方法
Jun 27 Python
python 接收处理外带的参数方法
Dec 03 Python
使用python opencv对目录下图片进行去重的方法
Jan 12 Python
python plotly绘制直方图实例详解
Jul 22 Python
Python实现快速排序的方法详解
Oct 25 Python
Python FTP文件定时自动下载实现过程解析
Nov 12 Python
在django-xadmin中APScheduler的启动初始化实例
Nov 15 Python
python opencv实现gif图片分解的示例代码
Dec 13 Python
python with (as)语句实例详解
Feb 04 Python
详解Python中的路径问题
Sep 02 Python
python中用ggplot绘制画图实例讲解
Jan 26 Python
python中取整数的几种方法
Nov 07 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初学者头疼问题总结
2006/07/08 PHP
php基于base64解码图片与加密图片还原实例
2014/11/03 PHP
php使用指定字符列表生成随机字符串的方法
2015/04/18 PHP
nginx+thinkphp下解决不支持pathinfo模式
2015/07/01 PHP
Thinkphp框架开发移动端接口(2)
2016/08/18 PHP
laravel 事件/监听器实例代码
2019/04/12 PHP
jMessageBox 基于jQuery的窗口插件
2009/12/09 Javascript
自己动手制作jquery插件之自动添加删除行功能介绍
2011/10/14 Javascript
Javascript中产生固定结果的函数优化技巧
2013/01/16 Javascript
使用PHP+JQuery+Ajax分页的实现
2013/04/23 Javascript
jQuery网页版打砖块小游戏源码分享
2015/08/20 Javascript
jquery.cookie实现的客户端购物车操作实例
2015/12/24 Javascript
Bootstrap Table的使用总结
2016/10/08 Javascript
PHP捕捉异常中断的方法
2016/10/24 Javascript
vue watch深度监听对象实现数据联动效果
2018/08/16 Javascript
jQuery实现购物车的总价计算和总价传值功能
2018/11/28 jQuery
vue 表单验证按钮事件交由父组件触发的方法
2018/12/17 Javascript
基于Vue的商品主图放大镜方案详解
2019/09/19 Javascript
jquery.tagsinput.js实现记录checkbox勾选的顺序
2019/09/21 jQuery
jQuery 判断元素是否存在然后按需加载内容的实现代码
2020/01/16 jQuery
react 生命周期实例分析
2020/05/18 Javascript
vue中解决chrome浏览器自动播放音频和MP3语音打包到线上的实现方法
2020/10/09 Javascript
Python模拟百度登录实例详解
2016/01/20 Python
python3.6 实现AES加密的示例(pyCryptodome)
2018/01/10 Python
python3实现基于用户的协同过滤
2018/05/31 Python
利用python脚本如何简化jar操作命令
2019/02/24 Python
python开发之anaconda以及win7下安装gensim的方法
2019/07/05 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
2019/08/15 Python
Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例
2020/03/18 Python
vscode调试django项目的方法
2020/08/06 Python
荷兰鞋子在线:Nelson Schoenen
2017/12/25 全球购物
EJB的几种类型
2012/08/15 面试题
门卫岗位职责说明书
2014/08/18 职场文书
财政专业大学生职业生涯规划书
2014/09/17 职场文书
交通安全横幅标语
2014/10/07 职场文书
Vue组件更新数据v-model不生效的解决
2022/04/02 Vue.js