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中enumerate函数用法实例分析
May 20 Python
Python的Twisted框架上手前所必须了解的异步编程思想
May 25 Python
解决pycharm的Python console不能调试当前程序的问题
Jan 20 Python
解决pytorch GPU 计算过程中出现内存耗尽的问题
Aug 19 Python
python输出数组中指定元素的所有索引示例
Dec 06 Python
如何在mac环境中用python处理protobuf
Dec 25 Python
基于Python爬取爱奇艺资源过程解析
Mar 02 Python
pycharm 激活码及使用方式的详细教程
May 12 Python
解决python 虚拟环境删除包无法加载的问题
Jul 13 Python
python 高阶函数简单介绍
Feb 19 Python
Python爬虫进阶之Beautiful Soup库详解
Apr 29 Python
Python 装饰器(decorator)常用的创建方式及解析
Apr 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动态生成虚拟现实VRML网页
2006/10/09 PHP
PHP4与PHP5的时间格式问题
2008/02/17 PHP
phpmyadmin出现Cannot start session without errors问题解决方法
2014/08/14 PHP
php防止网站被刷新的方法汇总
2014/12/01 PHP
你应该知道PHP浮点数知识
2015/05/13 PHP
PHP模板引擎smarty详细介绍
2015/05/26 PHP
使用vs code编辑调试php配置的方法
2019/01/29 PHP
验证javascript中Object和Function的关系的三段简单代码
2010/06/27 Javascript
jQuery的Ajax的自动完成功能控件简要说明
2013/02/22 Javascript
jQuery动态地获取系统时间实现代码
2013/05/24 Javascript
js 输出内容到新窗口具体实现代码
2013/05/31 Javascript
Jquery easyUI 更新行示例
2014/03/06 Javascript
JavaScript实现图片懒加载(Lazyload)
2016/11/28 Javascript
详解微信小程序Radio选中样式切换
2017/07/06 Javascript
详解设置Webstorm 利用babel将ES6自动转码成ES5
2017/12/20 Javascript
Vue+webpack+Element 兼容问题总结(小结)
2018/08/16 Javascript
详解小程序缓存插件(mrc)
2018/08/17 Javascript
JavaScript中将值转换为字符串的五种方法总结
2019/06/06 Javascript
谈谈IntersectionObserver懒加载的具体使用
2019/10/15 Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
2020/04/22 Javascript
python数据结构之二叉树的遍历实例
2014/04/29 Python
Python中使用支持向量机(SVM)算法
2017/12/26 Python
Python基于ThreadingTCPServer创建多线程代理的方法示例
2018/01/11 Python
python调用OpenCV实现人脸识别功能
2018/05/25 Python
Python使用requests提交HTTP表单的方法
2018/12/26 Python
python实现简单贪吃蛇游戏
2020/09/29 Python
天猫国际进口超市直营:官方直采,一站购齐
2017/12/11 全球购物
ZINVO手表官网:男士和女士手表
2019/03/10 全球购物
英国领先的游戏零售商:GAME
2019/09/24 全球购物
副总经理岗位职责
2014/03/16 职场文书
网站美工岗位职责
2014/04/02 职场文书
意向书范本
2014/07/29 职场文书
2014幼儿园班主任工作总结
2014/12/04 职场文书
诚信考试主题班会
2015/08/17 职场文书
ObjectMapper 如何忽略字段大小写
2021/06/29 Java/Android
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
2022/07/15 Servers