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中的类与实例
Apr 27 Python
Flask框架的学习指南之用户登录管理
Nov 20 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
Jun 07 Python
Python机器学习之决策树算法实例详解
Dec 06 Python
Python Xml文件添加字节属性的方法
Mar 31 Python
Python网络编程之使用TCP方式传输文件操作示例
Nov 01 Python
浅谈python中统计计数的几种方法和Counter详解
Nov 07 Python
Python 实现将某一列设置为str类型
Jul 14 Python
Python 实现一个计时器
Jul 28 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
Oct 15 Python
python 实现汉诺塔游戏
Nov 28 Python
详解解Django 多对多表关系的三种创建方式
Aug 23 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图像处理类库MagickWand用法实例分析
2015/05/21 PHP
php变量与数组相互转换的方法(extract与compact)
2016/12/02 PHP
PHP使用SOAP调用API操作示例
2018/12/25 PHP
PHP5.5新特性之yield理解与用法实例分析
2019/01/11 PHP
laravel5 Eloquent 实现事务方式
2019/10/21 PHP
JS 学习笔记 防止发生命名冲突
2009/07/30 Javascript
Jquery获取复选框被选中值的简单方法
2013/07/04 Javascript
js中return false(阻止)的用法
2013/08/14 Javascript
jquery easyui combobox模糊过滤(示例代码)
2013/11/30 Javascript
js 对小数加法精度处理示例说明
2013/12/27 Javascript
prototype框架中美元符号$用法分析
2016/01/22 Javascript
Bootstrap Img 图片样式(推荐)
2016/12/13 Javascript
Bootstrap CSS布局之表单
2016/12/17 Javascript
浅谈jQuery中事情的动态绑定
2017/02/12 Javascript
JS正则表达式常见用法实例详解
2018/06/19 Javascript
layer.open关闭父窗口 以及调用父页面的方法
2018/08/17 Javascript
pandas 对series和dataframe进行排序的实例
2018/06/09 Python
Django中使用Whoosh进行全文检索的方法
2019/03/31 Python
python简单实现矩阵的乘,加,转置和逆运算示例
2019/07/10 Python
django admin组件使用方法详解
2019/07/19 Python
python设计tcp数据包协议类的例子
2019/07/23 Python
python使用pip安装SciPy、SymPy、matplotlib教程
2019/11/20 Python
常用python爬虫库介绍与简要说明
2020/01/25 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
2020/06/18 Python
九年级体育教学反思
2014/01/23 职场文书
人力资源部经理的岗位职责
2014/03/04 职场文书
煤矿安全承诺书
2014/05/22 职场文书
篮球比赛策划方案
2014/06/05 职场文书
2014年纠风工作总结
2014/12/08 职场文书
经理岗位职责范本
2015/04/15 职场文书
生产现场禁烟通知
2015/04/23 职场文书
少先队工作总结2015
2015/05/13 职场文书
拿破仑传读书笔记
2015/07/01 职场文书
田径运动会广播稿
2015/08/19 职场文书
Spring Boot 底层原理基础深度解析
2022/04/03 Java/Android
mysql中如何用命令创建联合唯一索引
2022/04/20 MySQL