Python函数参数定义及传递方式解析


Posted in Python onJune 10, 2020

python中函数定义参数有四种形式:

def fun1(a,b,c):
  pass
def fun2(a=1,b=2,c=3):
  pass
def fun3(*args):
  pass
def fun4(**kargs):
  pass

四种中最常见是前两种,基本上一般点的教程都会涉及,后两种一般很少单独出现,常用在混合模式中

第一种 fun1(a,b,c)是直接将实参赋予形参,根据位置做匹配,即严格要求实参的数量与行参的数量位置相等,比较一般,大多数语言常用这种方式。

第二种 fun2(a=1,b=2,c=3)根据键值对的形式做实参与形参的匹配,通过这种式就可以忽略了参数的位置关系,直接根据关键字来进行赋值,同时该种传参方式还有个好处就是可以在调用函数的时候作为个别选填项,不要求数量上的相等,即可以fun5(3,4)来调用fun2函数,这里关键就是前面的3,4覆盖了原来a、b两个形参的值,但c还是不变采用原来的默认值3,这种模式相较第一种更加灵活,不仅可以通过fun6(c=5,a=2,b=7)来打乱行参的位置,而且可以在没有对应形参传递的时候使用定义函数时的默认值。

第三种 fun3(*args) ,这定义方式在传参时是可以传入任意个参数,这些若干参数都被放到了tuple元组中赋值给行参args,之后要在函数中使用这些行参,直接操作args这个tuple元组就可以了,这样的好处是在参数的数量上没有了限制,但是因为是tuple,其本身还是有次序的,这就仍然存在一定的束缚,在对参数操作上也会有一些不便

第四种 fun4(**kargs)最为灵活,其是以键值对字典的形式向函数传参,含有第二种位置的灵活的同时具有第三种方式的数量上的无限制。此外第三四种函数声明的方式前的'*',与c里面的指针声明一样,这里仅做声明标识之用

最后要强调的是四种定义和传递方式混合使用(大多数情况是这种),fun7(a,b,c,**d),但四种方式混用时要遵守:定义和传递时,*kargs必须在*args之后

混合使用时的赋值过程为:

1、先根据前两种形式定义的函数,按顺序把实参赋值给对应的形参;

2、将多余出非键值对实参打包组成一个tuple传递给*args;

3、将多余的key=value形式的实参打包正一个dicrionary传递给**kargs

举例

def test(x,y=5,*a,**b):
  print x,y,a,b
#调用结果:
test(1) ===> 1 5 () {}
test(1,2) ===> 1 2 () {}
test(1,2,3) ===> 1 2 (3,) {}
test(1,2,3,4) ===> 1 2 (3,4)
test(x=1) ===> 1 5 () {}
test(x=1,y=1) ===> 1 1 () {}
test(x=1,y=1,a=1) ===> 1 1 () {'a':1} 
test(x=1,y=1,a=1,b=1) ===> 1 1 () {'a':1,'b':1}
test(1,y=1) ===> 1 1 () {}
test(1,2,y=1) ===> 出错,说y给赋了多个值
test(1,2,3,4,a=1) ===> 1 2 (3,4) {'a':1}
test(1,2,3,4,k=1,t=2,o=3) ===> 1 2 (3,4) {'k':1,'t':2,'o':3}

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

Python 相关文章推荐
Python实现基于权重的随机数2种方法
Apr 28 Python
Python利用Nagios增加微信报警通知的功能
Feb 18 Python
Django实现的自定义访问日志模块示例
Jun 23 Python
代码分析Python地图坐标转换
Feb 08 Python
python自动重试第三方包retrying模块的方法
Apr 24 Python
用Python一键搭建Http服务器的方法
Jun 01 Python
使用Python3内置文档高效学习以及官方中文文档
May 19 Python
python 有效的括号的实现代码示例
Nov 11 Python
python matplotlib 绘图 和 dpi对应关系详解
Mar 14 Python
python库skimage给灰度图像染色的方法示例
Apr 27 Python
Python爬虫之Selenium实现窗口截图
Dec 04 Python
手把手教你用Django执行原生SQL的方法
Feb 18 Python
什么是python类属性
Jun 10 #Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
Jun 10 #Python
浅谈Python中的模块
Jun 10 #Python
keras多显卡训练方式
Jun 10 #Python
使用SQLAlchemy操作数据库表过程解析
Jun 10 #Python
keras 多gpu并行运行案例
Jun 10 #Python
Keras自定义IOU方式
Jun 10 #Python
You might like
JavaScript入门教程(8) Location地址对象
2009/01/31 Javascript
JQuery toggle使用分析
2009/11/16 Javascript
一些相见恨晚的 JavaScript 技巧
2010/04/25 Javascript
JQuery将文本转化成JSON对象需要注意的问题
2011/05/09 Javascript
jQuery的DOM操作之删除节点示例
2014/01/03 Javascript
javascript中typeof操作符和constucor属性检测
2015/02/26 Javascript
JS实现网页游戏中滑块响应鼠标点击移动效果
2015/10/19 Javascript
jquery实现列表上下移动功能
2016/02/25 Javascript
javascript中错误使用var造成undefined
2016/03/31 Javascript
ionic中列表项增加和删除的实现方法
2017/01/22 Javascript
动态Axios的配置步骤详解
2018/01/12 Javascript
JavaScript递归函数定义与用法实例分析
2019/01/24 Javascript
JS使用cookie保存用户登录信息操作示例
2019/05/30 Javascript
Vue实现点击按钮复制文本内容的例子
2019/11/09 Javascript
微信小程序实现同时上传多张图片
2020/02/03 Javascript
python中cPickle用法例子分享
2014/01/03 Python
批量获取及验证HTTP代理的Python脚本
2017/04/23 Python
python 寻找离散序列极值点的方法
2019/07/10 Python
Python 依赖库太多了该如何管理
2019/11/08 Python
python实现二分类的卡方分箱示例
2019/11/22 Python
python微信公众号开发简单流程实现
2020/03/09 Python
python实现数字炸弹游戏程序
2020/07/17 Python
Python threading模块condition原理及运行流程详解
2020/10/05 Python
python 实现有道翻译功能
2021/02/26 Python
基于HTML5的WebGL实现json和echarts图表展现在同一个界面
2017/10/26 HTML / CSS
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
高中生校园生活自我评价
2013/09/19 职场文书
工厂门卫岗位职责范本
2014/04/04 职场文书
交通运输局四风问题对照检查材料思想汇报
2014/10/09 职场文书
2014年平安夜寄语
2014/12/08 职场文书
写给老师的感谢信
2015/01/20 职场文书
2016中秋节晚会开场白
2015/11/26 职场文书
《月光曲》教学反思
2016/02/16 职场文书
导游词之丽江普济寺
2019/10/22 职场文书
python基础学习之生成器与文件系统知识总结
2021/05/25 Python
科学家研发出新型速效酶,可在 24 小时内降解塑料制品
2022/04/29 数码科技