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获取服务器信息的最简单实现方法
Mar 05 Python
用python实现对比两张图片的不同
Feb 05 Python
Python随机函数random()使用方法小结
Apr 29 Python
在Python中居然可以定义两个同名通参数的函数
Jan 31 Python
python调用虹软2.0第三版的具体使用
Feb 22 Python
python机器学习库scikit-learn:SVR的基本应用
Jun 26 Python
Python实现元素等待代码实例
Nov 11 Python
tensorflow实现测试时读取任意指定的check point的网络参数
Jan 21 Python
Python如何使用OS模块调用cmd
Feb 27 Python
python中rb含义理解
Jun 18 Python
教你用python实现一个无界面的小型图书管理系统
May 21 Python
Python利用folium实现地图可视化
May 23 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初学者写及时补给skype用户充话费的小程序
2008/11/02 PHP
PHP面向对象概念
2011/11/06 PHP
PHP中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
2013/02/14 PHP
php中array_slice和array_splice函数解析
2016/10/18 PHP
PHP获取访问页面HTTP状态码的实现代码
2016/11/03 PHP
cakephp常见知识点汇总
2017/02/24 PHP
javascript数组去重3种方法的性能测试与比较
2013/03/26 Javascript
调用DOM对象的focus使文本框获得焦点
2014/02/19 Javascript
jQuery中removeProp()方法用法实例
2015/01/05 Javascript
JavaScript实现SHA-1加密算法的方法
2015/03/11 Javascript
jQuery+PHP实现可编辑表格字段内容并实时保存
2015/10/09 Javascript
jquery实现简单实用的弹出层效果代码
2015/10/15 Javascript
一个简单不报错的summernote 图片上传案例
2016/07/11 Javascript
Boostrap栅格系统与自己额外定义的媒体查询的冲突问题
2017/02/19 Javascript
如何使用Bootstrap创建表单
2017/03/29 Javascript
angularJS实现不同视图同步刷新详解
2018/10/09 Javascript
create-react-app中添加less支持的实现
2019/11/15 Javascript
深度解读vue-resize的具体用法
2020/07/08 Javascript
基于JavaScript实现猜数字游戏代码实例
2020/07/30 Javascript
python 正则式使用心得
2009/05/07 Python
Python操作列表之List.insert()方法的使用
2015/05/20 Python
在Python中使用next()方法操作文件的教程
2015/05/24 Python
使用python实现http及ftp服务进行数据传输的方法
2018/10/26 Python
Django框架视图函数设计示例
2019/07/29 Python
python中upper是做什么用的
2020/07/20 Python
Python基于gevent实现文件字符串查找器
2020/08/11 Python
如何让pre和textarea等HTML元素去掉滚动条自动换行自适应文本内容高度
2019/08/01 HTML / CSS
Mio Skincare法国官网:身体紧致及孕期身体护理
2018/04/04 全球购物
银行个人求职自荐信范文
2013/12/16 职场文书
建筑项目策划书
2014/01/13 职场文书
门面房租房协议书
2014/08/20 职场文书
2015年平安创建工作总结
2015/04/29 职场文书
有关三国演义的读书笔记
2015/06/25 职场文书
2016关于预防职务犯罪的心得体会
2016/01/21 职场文书
银行柜员工作心得体会
2016/01/23 职场文书
Mysql调整优化之四种分区方式以及组合分区
2022/04/13 MySQL