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实现360皮肤按钮控件示例
Feb 21 Python
Python中编写ORM框架的入门指引
Apr 29 Python
python提取字典key列表的方法
Jul 11 Python
python实现SMTP邮件发送功能
Jun 16 Python
python将文本分每两行一组并保存到文件
Mar 19 Python
详解pytorch 0.4.0迁移指南
Jun 16 Python
python中hasattr()、getattr()、setattr()函数的使用
Aug 16 Python
python pygame实现挡板弹球游戏
Nov 25 Python
Python创建一个元素都为0的列表实例
Nov 28 Python
使用py-spy解决scrapy卡死的问题方法
Sep 29 Python
Python txt文件如何转换成字典
Nov 03 Python
Python 数据科学 Matplotlib图库详解
Jul 07 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
php mysql Errcode: 28 终极解决方法
2009/07/01 PHP
一步一步学习PHP(1) php开发环境配置
2010/02/15 PHP
php 截取字符串并以零补齐str_pad() 函数
2011/05/07 PHP
Apache服务器无法使用的解决方法
2013/05/08 PHP
php获取文件内容最后一行示例
2014/01/09 PHP
PHP数据分析引擎计算余弦相似度算法示例
2017/08/08 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
2019/10/15 PHP
javascript 获取页面的高度及滚动条的位置的代码
2010/05/06 Javascript
原生Js页面滚动延迟加载图片实现原理及过程
2013/06/24 Javascript
js取消单选按钮选中并判断对象是否为空
2013/11/14 Javascript
Javascript学习指南
2014/12/01 Javascript
javascript实现动态标签云
2015/10/16 Javascript
js监听键盘事件的方法_原生和jquery的区别详解
2016/10/10 Javascript
详解vue.js 开发环境搭建最简单攻略
2017/06/12 Javascript
解析Vue2 dist 目录下各个文件的区别
2017/11/22 Javascript
说说Vuex的getters属性的具体用法
2019/04/15 Javascript
小程序中英文混合排序问题解决
2019/08/02 Javascript
layui实现多图片上传并限制上传的图片数量
2019/09/26 Javascript
vue中jsonp插件的使用方法示例
2020/09/10 Javascript
python选择排序算法的实现代码
2013/11/21 Python
浅析Python中yield关键词的作用与用法
2016/11/29 Python
python使用opencv按一定间隔截取视频帧
2018/03/06 Python
Python File readlines() 使用方法
2018/03/19 Python
Python文件如何引入?详解引入Python文件步骤
2018/12/10 Python
对python内置map和six.moves.map的区别详解
2018/12/19 Python
科颜氏美国官网:Kiehl’s美国
2017/01/31 全球购物
施华洛世奇美国官网:SWAROVSKI美国
2018/02/08 全球购物
优良学风班申请材料
2014/02/13 职场文书
各营销点岗位职责范本
2014/03/05 职场文书
考生诚信考试承诺书
2014/05/23 职场文书
企业承诺书怎么写
2014/05/24 职场文书
工会2014法制宣传日活动总结
2014/11/01 职场文书
2015年敬老月活动总结
2015/03/27 职场文书
2016年幼儿园万圣节活动总结
2016/04/05 职场文书
idea编译器vue缩进报错问题场景分析
2021/07/04 Vue.js
JavaScript实现外溢动态爱心的效果的示例代码
2022/03/21 Javascript