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 相关文章推荐
LRUCache的实现原理及利用python实现的方法
Nov 21 Python
在python win系统下 打开TXT文件的实例
Apr 29 Python
python实现简易动态时钟
Nov 19 Python
python实现转盘效果 python实现轮盘抽奖游戏
Jan 22 Python
Python3从零开始搭建一个语音对话机器人的实现
Aug 23 Python
python每5分钟从kafka中提取数据的例子
Dec 23 Python
Python3 A*寻路算法实现方式
Dec 24 Python
python和go语言的区别是什么
Jul 20 Python
解决Python 函数声明先后顺序出现的问题
Sep 02 Python
如何判断pytorch是否支持GPU加速
Jun 01 Python
Pytorch中的学习率衰减及其用法详解
Jun 05 Python
Python OpenCV超详细讲解调整大小与图像操作的实现
Apr 02 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在Web开发领域的优势
2006/10/09 PHP
学习discuz php 引入文件的方法DISCUZ_ROOT
2009/06/21 PHP
PHP的中使用非缓冲模式查询数据库的方法
2017/02/05 PHP
ThinkPHP3.2框架操作Redis的方法分析
2019/05/05 PHP
JavaScript prototype对象的属性说明
2010/03/13 Javascript
25个非常棒的jQuery滑块插件和教程小结
2011/09/02 Javascript
Jquery图片滚动与幻灯片的实例代码
2013/04/08 Javascript
Javascript设置对象的ReadOnly属性(示例代码)
2013/12/25 Javascript
基于JavaScript代码实现随机漂浮图片广告
2016/01/05 Javascript
JS控制TreeView的结点选择
2016/11/11 Javascript
微信小程序使用wx.request请求服务器json数据并渲染到页面操作示例
2019/03/30 Javascript
说说如何利用 Node.js 代理解决跨域问题
2019/04/22 Javascript
javascript实现移动端触屏拖拽功能
2020/07/29 Javascript
解决Vue大括号字符换行踩的坑
2020/11/09 Javascript
Python程序员开发中常犯的10个错误
2014/07/07 Python
Python中利用sqrt()方法进行平方根计算的教程
2015/05/15 Python
Request的中断和ErrorHandler实例解析
2018/02/12 Python
Python使用gRPC传输协议教程
2018/10/16 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
2019/08/12 Python
python config文件的读写操作示例
2019/09/27 Python
Python Selenium参数配置方法解析
2020/01/19 Python
pycharm设置当前工作目录的操作(working directory)
2020/02/14 Python
Python描述数据结构学习之哈夫曼树篇
2020/09/07 Python
CSS3 box-sizing属性
2009/04/17 HTML / CSS
美国生日蛋糕店:Bake Me A Wish!
2017/02/08 全球购物
adidas泰国官网:adidas TH
2020/07/11 全球购物
大学生职业生涯规划书的基本内容
2014/01/06 职场文书
怎样写好创业计划书的内容
2014/02/06 职场文书
导师就业推荐信范文
2014/05/22 职场文书
任命书模板
2014/06/04 职场文书
先进班组材料范文
2014/12/25 职场文书
黄埔军校观后感
2015/06/10 职场文书
2015年度环卫处工作总结
2015/07/24 职场文书
安全伴我行主题班会
2015/08/13 职场文书
详解Python函数print用法
2021/06/18 Python
SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户 WIN-8IVSNAQS8T7\Administrator 的信息
2021/06/30 SQL Server