Python中函数传递参数的形式主要有以下五种,分别为位置传递,关键字传递,默认值传递,不定参数传递(包裹传递)和解包裹传递。前三种都比较清楚,那么本文来讲一下包裹传递和解包裹传递。

  • args 是 arguments 的缩写,表示位置参数;
  • kwargs 是 keyword arguments 的缩写,表示关键字参数。

其实这只是编程人员约定的变量名字,你用其他的命名也没问题。这其实就是 Python 中可变参数的两种形式,并且 *args 必须放在 **kwargs 的前面,否则会有“SyntaxError: non-keyword arg after keyword arg”的语法错误。

知识点:

  1. 在函数调用时,*会以单个元素的形式解包一个元组,使其成为独立的参数。
  2. 在函数调用时,**会以键/值对的形式解包一个字典,使其成为独立的关键字参数。

先来看下*args的例子:

def f(a,*args):print(args)
f(1,2,3,4)# 输出为:(2, 3, 4)
# 虽然传入1,2,3,4,但是解包为(1),(2,3,4),其中a是1,args是剩下的参数。
def f(a,b,*args):print(a)print(args)
f([1,2,3,4,5])
# 输出为:
# 1
# (3, 4, 5)   # 变成元组了

在python中,当*和**符号出现在函数定义的参数中时,表示任意数目参数。*arg表示任意多个无名参数,类型为tuple; **kwargs表示关键字参数,为dict.

再看下**kwargs传参的例子:

def f(**kwargs):print(kwargs)
f(a=1,b=2) # 实际传入参数是两个,但是给包裹在一起# 输出为:{'a': 1, 'b': 2}
def f(name,age,**kwargs):print('name:',name,'age:',age,'info:',kwargs)
f('Jerry', 18, gender='M', job='Engineer')# 输出为:name: Jerry age: 18 info: {'gender': 'M', 'job': 'Engineer'}
# 传入4个参数,自动将后两位拼接成字典

再看*args和**kwargs混合使用的栗子:

def f(a,*args,**kwargs):print(a,args,kwargs)f(1,2,3,x=4,y=5)
# 丢进去不确定参数的包裹:1,2,3,x=4,y=5
# 解包:1                    -a
# 解包:(2,3)               -*args
# 解包:{'x': 4, 'y': 5}        -**kwargs# 输出为:1 (2, 3) {'x': 4, 'y': 5}

Python 函数的参数传递*args和**kwargs相关推荐

  1. python:函数的参数传递方法演示

    """ 函数的参数传递方法演示 """ #1.位置传参 def normal(a, b, c):print("1.位置传参:&qu ...

  2. 站长在线Python精讲:在Python函数中参数传递的位置参数详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python函数中参数传递的位置参数详解>.本文的主要内容有:实参和形参数量必须与定义时一致和实参和形参位置必须与定义时一 ...

  3. python args_Python可变参数*args和**kwargs用法实例小结

    本文实例讲述了Python可变参数*args和**kwargs用法.分享给大家供大家参考,具体如下: 一句话简单概括:当函数的参数不确定的时候就需要用到*args和**kwargs,前者和后者的区别在 ...

  4. Python函数的参数传递

    函数的参数传递是指将实际参数传递给形式参数的过程,根据不同的传递形式,函数的参数可分为位置参数,关键字参数,默认值参数,不定长参数. 一 位置参数 调用函数时,编译器会将函数的实际参数按照位置顺序依次 ...

  5. python大作战之*args和**kwargs的区别

    对于*args和**kwargs在函数中我们可以称之为参数组,但是这两个还是有区别的 1:*args的功能:------接收N个位置参数,转换成元组tuple形式 2:**kwargs的功能----- ...

  6. Python可变传参: *args和**kwargs

    args是参数的数组,kwargs就是当你传入key=value是存储的字典. 请看例子: def test(a,*args,**kwargs): print "a: ",a pr ...

  7. python函数关键字参数传递_Python给函数传递不定关键字的参数

    转载请注明来自公众号『数据挖掘机养成记』 前言 在上一篇文章『[Python]给函数传递不定个数的参数』中,我们主要讲解了*在函数定义和函数调用阶段的不同作用,并留了一个小问题: 我们用*定义了add ...

  8. Python函数作为参数传递给函数

    Python中一切皆对象(object).–Dive Into Python 既然一切皆对象,那么一切都可以作为参数传递! 1.定义两个简单的函数 函数1–add_params(a,b): a,b两个 ...

  9. python函数可选参数传递_Python中函数的参数传递

    1.普通的参数传递 >>> def add(a,b): return a+b >>> print add(1,2) 3 >>> print add ...

最新文章

  1. varnish 实现 CDN 缓存系统构建
  2. java同步互斥功能检测_猿考研之操作系统篇三(进程同步,管程,死锁)
  3. 解决WINCE6.0新建工程编译出错的问题
  4. [我的1024开源程序]200元仿豆瓣小程序带评论
  5. js构造函数的浅薄理解
  6. lab 常用配置参数 代码片段
  7. 前端进阶系列(六):盒模型
  8. 开发指南专题一: JEECG微云快速开发平台前言
  9. 美团(Leaf)分布式ID算法
  10. MyBatis的搭建流程(idea+maven)
  11. 剑指offer之机器人的运动轨迹
  12. 3.空域图像处理的洪荒之力
  13. cv2 imread函数 python_opencv-python图形图像处理入门基础知识
  14. 中秋节主题征文 | 那些不朽的描写月亮的诗词
  15. python如何调用谷歌搜图api_python如何调用百度识图api
  16. windows和linux双系统
  17. excel中“~”替换成“-”
  18. oracle 优化 io占用,oracle 整体性能优化概述之五:调整磁盘io
  19. 阿里P9整理分享的亿级流量Java高并发与网络编程实战PDF
  20. 小学计算机动画制作,小学flash动画课件制作方法

热门文章

  1. 不想当将军的士兵不是好士兵,努力学习成为架构师吧
  2. javascript中toFixed()方法详解
  3. python3的基础练习题—速度收藏
  4. 自动发送生日祝福短信 php,抖音很火的文字情话 2019抖音最火自己生日祝福语
  5. 能看懂的3D Tic-Tac-Toe问题_gruobi求解
  6. python 面试题目嗯哼
  7. 电动车被盗?爱车如何保障安全?
  8. java red5 点播_树莓派实用RED5搭建流媒体服务器实现点播功能
  9. LAMP PHP介绍
  10. 三星GT-N8010刷机教程