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实现的各种排序算法代码
Mar 04 Python
Python判断字符串与大小写转换
Jun 08 Python
Python字符串格式化的方法(两种)
Sep 19 Python
从列表或字典创建Pandas的DataFrame对象的方法
Jul 06 Python
python pickle存储、读取大数据量列表、字典数据的方法
Jul 07 Python
PyTorch中常用的激活函数的方法示例
Aug 20 Python
django数据模型(Model)的字段类型解析
Dec 25 Python
Python爬虫实现百度翻译功能过程详解
May 29 Python
jupyter 添加不同内核的操作
Feb 06 Python
详解python3 GUI刷屏器(附源码)
Feb 18 Python
python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门)
Feb 19 Python
golang特有程序结构入门教程
Jun 02 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下几种删除目录的方法总结
2007/08/19 PHP
php完全过滤HTML,JS,CSS等标签
2009/01/16 PHP
php中使用DOM类读取XML文件的实现代码
2011/12/14 PHP
自定义php类(查找/修改)xml文档
2013/03/26 PHP
PHP 实现explort() 功能的详解
2013/06/20 PHP
php自定义session示例分享
2014/04/22 PHP
php绘制一个扇形的方法
2015/01/24 PHP
使用PHP访问RabbitMQ消息队列的方法示例
2018/06/06 PHP
跨浏览器的设置innerHTML方法
2006/09/18 Javascript
用jQuery技术实现Tab页界面之二
2009/09/21 Javascript
js本身的局限性 别让javascript做太多事
2010/03/23 Javascript
js日历功能对象
2012/01/12 Javascript
jquery getScript动态加载JS方法改进详解
2012/11/15 Javascript
js函数调用常用方法详解
2012/12/03 Javascript
JavaScript的常见兼容问题及相关解决方法(chrome/IE/firefox)
2013/12/31 Javascript
Javascript显示和隐藏ul列表的方法
2015/07/15 Javascript
jQuery实现的自定义弹出层效果实例详解
2016/09/04 Javascript
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
2017/05/09 Javascript
JavaScript中防止微信浏览器被整体拖动的方法
2017/08/25 Javascript
浅谈手写node可读流之流动模式
2018/06/01 Javascript
vue 兄弟组件的信息传递的方法实例详解
2019/08/30 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
2019/09/27 Javascript
layui实现form表单同时提交数据和文件的代码
2019/10/25 Javascript
JS实现盒子拖拽效果
2020/02/06 Javascript
JS如何生成动态列表
2020/09/22 Javascript
[56:18]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第二局
2016/03/05 DOTA
python基础教程之字典操作详解
2014/03/25 Python
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
2016/01/20 Python
Python 实现一个颜色色值转换的小工具
2016/12/06 Python
Django+zTree构建组织架构树的方法
2019/08/21 Python
Python+opencv+pyaudio实现带声音屏幕录制
2019/12/23 Python
纯CSS实现菜单、导航栏的3D翻转动画效果
2014/04/23 HTML / CSS
英国奢侈品网站:MatchesFashion
2016/12/16 全球购物
阿里健康官方海外旗舰店:阿里健康国际自营
2017/11/24 全球购物
新农村建设典型材料
2014/05/31 职场文书
浅谈Redis的事件驱动模型
2022/05/30 Redis