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 相关文章推荐
使用Django的模版来配合字符串翻译工作
Jul 27 Python
Python及PyCharm下载与安装教程
Nov 18 Python
python代码实现ID3决策树算法
Dec 20 Python
python3利用Dlib19.7实现人脸68个特征点标定
Feb 26 Python
Python爬虫实现(伪)球迷速成
Jun 10 Python
pandas去除重复列的实现方法
Jan 29 Python
在Python中如何传递任意数量的实参的示例代码
Mar 21 Python
Pandas之groupby( )用法笔记小结
Jul 23 Python
django 简单实现登录验证给你
Nov 06 Python
django xadmin 管理器常用显示设置方式
Mar 11 Python
Python用类实现扑克牌发牌的示例代码
Jun 01 Python
matplotlib相关系统目录获取方式小结
Feb 03 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导出Excel的小经验 完美解决乱码问题
2013/06/10 PHP
PHP实现根据浏览器跳转不同语言页面代码
2013/08/02 PHP
destoon实现公司新闻详细页添加评论功能的方法
2014/07/15 PHP
php中explode的负数limit用法分析
2015/02/27 PHP
php使用指定字符列表生成随机字符串的方法
2015/04/18 PHP
使用laravel根据用户类型来显示或隐藏字段
2019/10/17 PHP
浅析PHP echo 和 print 语句
2020/06/30 PHP
传智播客学习之JavaScript基础篇
2009/11/13 Javascript
Javascript引用指针使用介绍
2012/11/07 Javascript
javascript验证上传文件的类型限制必须为某些格式
2013/11/14 Javascript
Firefox下无法正常显示年份的解决方法
2014/09/04 Javascript
JavaScript中操作Mysql数据库实例
2015/04/02 Javascript
如何使用jquery修改css中带有!important的样式属性
2016/04/28 Javascript
AngularJS实用开发技巧(推荐)
2016/07/13 Javascript
微信小程序 五星评分(包括半颗星评分)实例代码
2016/12/14 Javascript
jquery实现自定义图片裁剪功能【推荐】
2017/03/08 Javascript
如何使用vuejs实现更好的Form validation?
2017/04/07 Javascript
nodejs 子进程正确的打开方式
2017/07/03 NodeJs
JS 中LocalStorage和SessionStorage的使用
2017/08/17 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
js canvas画布实现高斯模糊效果
2018/11/27 Javascript
JavaScript常见事件对象与操作实例总结
2019/01/05 Javascript
浅谈webpack性能榨汁机(打包速度优化)
2019/01/09 Javascript
在Python中用get()方法获取字典键值的教程
2015/05/21 Python
使用Python编写简单的端口扫描器的实例分享
2015/12/18 Python
详解python之多进程和进程池(Processing库)
2017/06/09 Python
Python编写通讯录通过数据库存储实现模糊查询功能
2019/07/18 Python
Python高级特性 切片 迭代解析
2019/08/23 Python
基于python实现模拟数据结构模型
2020/06/12 Python
Python matplotlib图例放在外侧保存时显示不完整问题解决
2020/07/28 Python
英国网上香水店:Fragrance Direct
2016/07/20 全球购物
美国领先的在线旅游网站:Orbitz
2018/11/05 全球购物
英国著名的美容护肤和护发产品购物网站:Lookfantastic
2020/11/23 全球购物
委托公证书
2014/04/08 职场文书
三月雷锋月活动总结
2014/07/03 职场文书
庆祝国庆节标语
2014/10/09 职场文书