python中函数传递参数有四种形式

fun1(a,b,c)
fun2(a=1,b=2,c=3)
fun3(*args)
fun4(**kargs)

四种中最常见是前两种,基本上一般点的教程都会涉及,后两种一般很少单独出现,常用在混合模式中

第一种 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),但四种方式混用时要遵守:

  • args = 须在args之后
  • *args须在args=value之后
  • **kargs须在*args之后

赋值过程为:

  1. 按顺序把传给args的实参赋值给对应的行参
  2. args = value 形式的实参赋值给行参
  3. 将多余出的即键值对行后的零散实参打包组成一个tuple传递给*args
  4. 将多余的key=value形式的实参打包正一个dicrionary传递给**kargs
举例

定义

def test(x,y=5,*,**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}

转载于:https://www.cnblogs.com/youzizz/p/9869583.html

python函数的四种参数传递方式相关推荐

  1. Python函数中4种参数的使用

    1.必需的参数: 必须参数须以正确的顺序传入函数,调用的数量必须和声明时的一样 def f(name,age):print('I am %s,I am %d'%(name,age))f('alex', ...

  2. Python 函数的4种参数

    Python的函数参数有4种: 必选参数:函数调用时必须赋值的参数 默认参数:函数定义时,赋予默认值的参数,位于必选参数之后.如def test(param,default=3),default为默认 ...

  3. python函数支持哪些参数类型_Python函数的几种参数类型

    以下代码均以Python3为基础理解. 初识Python函数 大部分常见的语言如C.Java.PHP.C#.JavaScript等属于C系语言,Python不属于他们中的一员(ruby亦然).在这些语 ...

  4. 函数 函数的基本使用 函数的四种基本形式 可选参数 函数默认参数 函数的剩余参数 构造函数() 函数重(chong)载

    函数主要定义行为的 匿名参数 const mingz = function  无名字(参数:数值类型):返回值的类型 接口函数: type(关键字)  别名 = (参数:number)=>返回值 ...

  5. 函数的四种调用模式.上下文调用.call.apply

    闭包:函数就是一个闭包,一个封闭的作用域; 返回函数,要返回多个函数就用一个对象封装一下, 立即执行函数+return 回调函数 JS动态创建的DOM,不会被搜索引擎抓取,对SEO不友好. /*win ...

  6. url 参数传递的两种方式_VB编程中的传值与传址两种参数传递方式,你清楚吗?...

    Tips:欢迎公众号设置为星标,VB技术干货文章可以第一时间看到.如您在学习VB过程中有独特的见解或者想法,欢迎投稿,可在公众号文章下直接留言. 推荐阅读 1. VB编程语言基础知识点总结 2. VB ...

  7. [转载] 详细介绍Python函数中的默认参数

    参考链接: Python函数中的默认参数 详细介绍Python函数中的默认参数 import datetime as dt def log_time(message, time=None): if t ...

  8. C语言的三种参数传递方式

    原 C语言的3种参数传递方式 2017年09月14日 18:30:26 采香行处 阅读数:14619 </div><div class="operating"&g ...

  9. JavaScript高级第2天:定义函数的三种方式、函数的原型链结构、完整原型链、作用域以及作用域链、函数的四种调用模式、闭包、计数器、斐波那契数列优化、三种继承方式

    JavaScript高级第二天 01-定义函数的三种方式 1.函数声明 function:可以先调用再声明,因为预解析(把函数声明.变量声明进行提升) function fn() {//函数体conl ...

  10. 函数的四种调用模式以及call()apply()和bind()

    函数的四种调用模式 根据函数内部this的指向不同,可以将函数的调用模式分成4种 函数调用模式 方法调用模式 构造函数调用模式 上下文调用模式(借用方法模式) 函数:当一个函数不是一个对象的属性时,我 ...

最新文章

  1. python cmdb资产_SuperCMDB - 资产管理+跳板审计
  2. 电脑缺失MSVCP110.dll文件
  3. doc文件转换html,HTML+CSS入门 如何使用POI将doc文件转换为HTML
  4. Mr.J-- jQuery学习笔记(十八)--自定义动画
  5. 用c语言编写成绩单由高到低,C语言程序设计实验.doc
  6. 计算一条3d空间直线和一个3d空间平面的交点
  7. 三十年中国GIS基础软件市场回顾与发展展望
  8. 软件测试入门理论基础
  9. 语音搜索的基础-语音识别
  10. Python 弹出提示框
  11. java中国象棋兵吃棋规则_中国象棋吃子的规则
  12. 计算机管理上移动硬盘显示其他设备,移动硬盘坏了插上之后电脑会显示有新设备接入而且设备运转正常,但我 爱问知识人...
  13. 区块链共识机制 和 经典分布式共识机制
  14. 一文学会 Spring MVC 表单标签
  15. 如何在office2016(word2016)中安装mathtype6.9及相关问题解决方案
  16. 台式电脑显示屏显示html,台式机电脑屏幕突然出现彩色条纹原因及解决方法
  17. ANSYS apdl软件学习指令(建立三维模型)
  18. nokia 1320升级到win10预览版
  19. 音视频基础+ffmpeg原理(视频基础知识)
  20. 【转】微信小游戏开发源码_教程_工具_资源最新集合

热门文章

  1. Matching the Blanks: Distributional Similarity for Relation Learning (通篇翻译)
  2. JavaScript监听键盘事件,组合键事件
  3. 【知识图谱】实践篇——基于知识图谱的《红楼梦》人物关系可视化及问答系统实践:part1项目介绍与环境准备
  4. jstl 无法自动加载c.tld文件
  5. 时序分析 45 -- 时序数据转为空间数据 (四) 格拉姆角场 python 实践 (下)
  6. 运用supervisor管理thinkqueue 和swoole推送
  7. 团队管理31-典型场景(向上沟通)
  8. 软考中级真题 2015年上半年 系统集成项目管理工程师 应用技术
  9. python123货币转换器_python货币转换
  10. 访问服务器显示我被拒绝,连接到服务器localhost:8080被拒绝(The connection to the server localhost:8080 was refused)...