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创建只读属性对象的方法(ReadOnlyObject)
Feb 10 Python
Python使用代理抓取网站图片(多线程)
Mar 14 Python
python多重继承新算法C3介绍
Sep 28 Python
通过C++学习Python
Jan 20 Python
python常规方法实现数组的全排列
Mar 17 Python
Python实现自定义顺序、排列写入数据到Excel的方法
Apr 23 Python
python中使用print输出中文的方法
Jul 16 Python
python numpy数组的索引和切片的操作方法
Oct 20 Python
python 将字符串完成特定的向右移动方法
Jun 11 Python
通过自学python能找到工作吗
Jun 21 Python
python如何在word中存储本地图片
Apr 07 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的FTP学习(二)
2006/10/09 PHP
ubuntu 编译安装php 5.3.3+memcache的方法
2010/08/05 PHP
Yii+MYSQL锁表防止并发情况下重复数据的方法
2016/07/14 PHP
jQuery中与toggleClass等价的程序段 以及未来学习的方向
2010/03/18 Javascript
学习javascript,实现插入排序实现代码
2011/07/31 Javascript
javascript学习笔记(十七) 检测浏览器插件代码
2012/06/20 Javascript
js语法学习之判断一个对象是否为数组
2014/05/13 Javascript
手机端页面rem宽度自适应脚本
2015/05/20 Javascript
动态设置form表单的action属性的值的简单方法
2016/05/25 Javascript
Angularjs修改密码的实例代码
2017/05/26 Javascript
详解http访问解析流程原理
2017/10/18 Javascript
Vue中的Vux配置指南
2017/12/08 Javascript
node.js使用免费的阿里云ip查询获取ip所在地【推荐】
2018/09/03 Javascript
JS使用Dijkstra算法求解最短路径
2019/01/17 Javascript
JavaScript使用面向对象实现的拖拽功能详解
2019/06/12 Javascript
koa2的中间件功能及应用示例
2020/03/05 Javascript
JavaScript事件循环及宏任务微任务原理解析
2020/09/02 Javascript
浅析vue中的nextTick
2020/12/28 Vue.js
[01:14:19]NAVI vs Mineski 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
python base64 decode incorrect padding错误解决方法
2015/01/08 Python
在Python中处理字符串之isdecimal()方法的使用
2015/05/20 Python
Python获取当前函数名称方法实例分享
2018/01/18 Python
深入了解和应用Python 装饰器 @decorator
2019/04/02 Python
Python 多个图同时在不同窗口显示的实现方法
2019/07/07 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
2020/04/20 Python
为中国消费者甄选天下优品:网易严选
2016/08/11 全球购物
Nordgreen台湾官网:极简北欧设计手表
2019/08/21 全球购物
N:Philanthropy官网:美国洛杉矶基础款服装
2020/06/09 全球购物
存储过程和函数的区别
2013/05/28 面试题
国贸专业个人求职信分享
2013/12/04 职场文书
竞聘演讲稿范文
2014/01/12 职场文书
工作推荐信范文
2014/05/10 职场文书
关于青春的演讲稿三分钟
2014/08/22 职场文书
2015年乡镇党务公开工作总结
2015/05/19 职场文书
廉政党课工作报告案例
2019/06/21 职场文书
提高系统的吞吐量解决数据库重复写入问题
2022/04/23 MySQL