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开发之thread线程基础实例入门
Nov 11 Python
Python脚本实现Web漏洞扫描工具
Oct 25 Python
python使用logging模块发送邮件代码示例
Jan 18 Python
Python3中的json模块使用详解
May 05 Python
python 找出list中最大或者最小几个数的索引方法
Oct 30 Python
Python中使用__new__实现单例模式并解析
Jun 25 Python
使用python实现对元素的长截图功能
Nov 14 Python
python 监测内存和cpu的使用率实例
Nov 28 Python
tensorflow中tf.reduce_mean函数的使用
Apr 19 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
Aug 18 Python
Python脚本调试工具安装过程
Jan 11 Python
超级详细实用的pycharm常用快捷键
May 12 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
使用apache模块rewrite_module (转)
2007/02/14 PHP
php中把美国时间转为北京时间的自定义函数分享
2014/07/28 PHP
php简单实现查询数据库返回json数据
2015/04/16 PHP
PHP模板引擎Smarty内置变量调解器用法详解
2016/04/11 PHP
PHP获取用户客户端真实IP的解决方案
2016/10/10 PHP
php使用curl实现ftp文件下载功能
2017/05/16 PHP
Jquery 基础学习笔记
2009/05/29 Javascript
JS的反射问题
2010/04/07 Javascript
基于jQuery的图片左右无缝滚动插件
2012/05/23 Javascript
FusionCharts图表显示双Y轴双(多)曲线
2012/11/22 Javascript
javascript中加号(+)操作符的一些神奇作用
2014/06/06 Javascript
JS实现在网页中弹出一个输入框的方法
2015/03/03 Javascript
javascript实现图片上传前台页面
2015/08/18 Javascript
图片旋转、鼠标滚轮缩放、镜像、切换图片js代码
2020/12/13 Javascript
JavaScript笔记之数据属性和存储器属性
2016/03/31 Javascript
AngularJs 60分钟入门基础教程
2016/04/03 Javascript
使用vue.js实现checkbox的全选和多个的删除功能
2017/02/17 Javascript
JS简单验证上传文件类型的方法
2017/04/17 Javascript
JS去掉字符串前后空格、阻止表单提交的实现代码
2017/06/08 Javascript
详解Vuejs2.0 如何利用proxyTable实现跨域请求
2017/08/03 Javascript
如何理解Vue的v-model指令的使用方法
2018/07/19 Javascript
对angular 监控数据模型变化的事件方法$watch详解
2018/10/09 Javascript
原生JS实现随机点名项目的实例代码
2019/04/30 Javascript
Python中pandas dataframe删除一行或一列:drop函数详解
2018/07/03 Python
Django进阶之CSRF的解决
2018/08/01 Python
使用python 对验证码图片进行降噪处理
2019/12/18 Python
详解Python 循环嵌套
2020/07/09 Python
Marc Jacobs官方网站:美国奢侈品牌
2017/08/29 全球购物
Ray-Ban雷朋奥地利官网:全球领先的太阳眼镜品牌
2020/10/12 全球购物
人力资源主管的岗位职责
2014/03/15 职场文书
安全例会汇报材料
2014/08/23 职场文书
公务员培的训心得体会
2014/09/01 职场文书
爱祖国爱家乡演讲稿
2014/09/02 职场文书
离婚协议书范文2014(夫妻感情破裂)
2014/12/14 职场文书
Java基础-封装和继承
2021/07/02 Java/Android
Spark SQL 2.4.8 操作 Dataframe的两种方式
2021/10/16 SQL Server