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中的hashlib和base64加密模块使用实例
Sep 02 Python
python中sys.argv参数用法实例分析
May 20 Python
python中redis的安装和使用
Dec 04 Python
python中类变量与成员变量的使用注意点总结
Apr 29 Python
python进阶_浅谈面向对象进阶
Aug 17 Python
使用 Python 实现微信公众号粉丝迁移流程
Jan 03 Python
对python_discover方法遍历所有执行的用例详解
Feb 13 Python
详解使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件
Aug 23 Python
在python中创建指定大小的多维数组方式
Nov 28 Python
python处理RSTP视频流过程解析
Jan 11 Python
pytorch构建多模型实例
Jan 15 Python
Python转换字典成为对象,可以用"."方式访问对象属性实例
May 11 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
DC《神奇女侠2》因疫情推迟上映 温子仁新恐怖片《恶性》撤档
2020/04/09 欧美动漫
异世界新番又来了,同样是从零开始,男主的年龄降到5岁
2020/04/09 日漫
用PHP和ACCESS写聊天室(九)
2006/10/09 PHP
IIS6的PHP最佳配置方法
2007/03/19 PHP
PHP开发APP端微信支付功能
2017/02/17 PHP
php+Ajax处理xml与json格式数据的方法示例
2019/03/04 PHP
php创建类并调用的实例方法
2019/09/25 PHP
IE和Firefox下javascript的兼容写法小结
2008/12/10 Javascript
获得所有表单值的JQuery实现代码[IE暂不支持]
2012/05/24 Javascript
jquery text(),val(),html()方法区别总结
2013/11/04 Javascript
如何动态的导入js文件具体该怎么实现
2014/01/14 Javascript
jquery实现背景墙聚光灯效果示例分享
2014/03/02 Javascript
Javascript的严格模式strict mode详细介绍
2014/06/06 Javascript
JQuery显示隐藏页面元素的方法总结
2015/04/16 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
2016/08/18 Javascript
AngularJS中的拦截器实例详解
2017/04/07 Javascript
Angular实现的内置过滤器orderBy排序与模糊查询功能示例
2017/12/29 Javascript
原生JS实现的双色球功能示例
2018/02/02 Javascript
vuex + keep-alive实现tab标签页面缓存功能
2019/10/17 Javascript
openlayers 3实现车辆轨迹回放
2020/09/24 Javascript
[23:21]Ti4 冒泡赛第二轮DK vs C9 2
2014/07/14 DOTA
[57:31]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第一场 2月1日
2021/03/11 DOTA
python读写文件操作示例程序
2013/12/02 Python
如何解决django配置settings时遇到Could not import settings 'conf.local'
2014/11/18 Python
python3.4+pycharm 环境安装及使用方法
2019/06/13 Python
python psutil模块使用方法解析
2019/08/01 Python
python 实现单通道转3通道
2019/12/03 Python
你不知道的5个HTML5新功能
2016/06/28 HTML / CSS
会计自我鉴定
2013/11/02 职场文书
关于运动会的口号
2014/06/07 职场文书
2014领导干部四风问题查摆思想汇报
2014/09/13 职场文书
纪念九一八事变演讲稿:青少年应树立远大理想
2014/09/14 职场文书
先进教师个人总结
2015/02/11 职场文书
文明旅游倡议书
2015/04/28 职场文书
什么是动态刷新率DRR? Windows11动态刷新率功能介绍
2021/11/21 数码科技
mysql中数据库覆盖导入的几种方式总结
2022/03/25 MySQL