python函数形参中的*args和**kwargs
转载:https://www.cnblogs.com/xuyuanyuan123/p/6674645.html
多个实参,放到一个元组里面,以*开头,可以传多个参数;**是形参中按照关键字传值把多余的传值以字典的方式呈现
*args:(表示的就是将实参中按照位置传值,多出来的值都给args,且以元祖的方式呈现)
示例:
|
1
2
3
4
5
|
def foo(x,*args): print(x) print(args)foo(1,2,3,4,5)#其中的2,3,4,5都给了args |
执行结果是:
|
1
2
|
1(2, 3, 4, 5) |
当args与位置参数和默认参数混用的情况下:(注意三者的顺序)
示例一、(三者顺序是:位置参数、默认参数、*args)
|
1
2
3
4
5
6
|
def foo(x,y=1,*args): print(x) print(y) print(args)foo(1,2,3,4,5)#其中的x为1,y=1的值被2重置了,3,4,5都给了args |
执行结果是:
|
1
2
3
|
12(3, 4, 5) |
示例二、(三者顺序是:位置参数、*args、默认参数)
|
1
2
3
4
5
6
|
def foo(x,*args,y=1): print(x) print(args) print(y)foo(1,2,3,4,5)#其中的x为1,2,3,4,5都给了args,y按照默认参数依旧为1 |
执行结果是:
|
1
2
3
|
1(2, 3, 4, 5)1 |
其中关于*,可以从2个角度来看(需要拆分来看):
1、从形参的角度来看:
示例:
|
1
2
3
|
def foo(*args):#其实这一操作相当于def foo(a,b,c,d,e): print(args)foo(1,2,3,4,5)#其中的1,2,3,4,5都按照位置传值分别传给了a,b,c,d,e |
执行结果是:
|
1
|
(1, 2, 3, 4, 5) |
2、从实参的角度来看:
示例:
|
1
2
3
4
5
6
|
def foo(x,y,z): print(x) print(y) print(z) foo(*(1,2,3))#其中的*(1,2,3)拆开来看就是:foo(1,2,3),都按照位置传值分别传给了x,y,z |
执行结果是:
|
1
2
3
|
123 |
——————————————————————————————————————————————————————————————————————————————————————
**kwargs:(表示的就是形参中按照关键字传值把多余的传值以字典的方式呈现)
示例:
|
1
2
3
4
|
def foo(x,**kwargs): print(x) print(kwargs)foo(1,y=1,a=2,b=3,c=4)#将y=1,a=2,b=3,c=4以字典的方式给了kwargs |
执行结果是:
|
1
2
|
1{'y': 1, 'a': 2, 'b': 3, 'c': 4} |
关于**kwargs与位置参数、*args、默认参数混着用的问题:(注意顺序)
位置参数、*args、**kwargs三者的顺序必须是位置参数、*args、**kwargs,不然就会报错:
示例:
|
1
2
3
4
5
|
def foo(x,*args,**kwargs): print(x) print(args) print(kwargs)foo(1,2,3,4,y=1,a=2,b=3,c=4)#将1传给了x,将2,3,4以元组方式传给了args,y=1,a=2,b=3,c=4以字典的方式给了kwargs |
执行结果是:
|
1
2
3
|
1(2, 3, 4){'y': 1, 'a': 2, 'b': 3, 'c': 4} |
错误示例:(由于顺序错误)
|
1
2
3
4
5
|
def foo(x,**kwargs,*args): print(x) print(args) print(kwargs)foo(1,y=1,a=2,b=3,c=4,2,3,4) |
执行结果就会报错:
|
1
|
SyntaxError: invalid syntax |
位置参数、默认参数、**kwargs三者的顺序必须是位置参数、默认参数、**kwargs,不然就会报错:
示例:
|
1
2
3
4
5
|
def foo(x,y=1,**kwargs): print(x) print(y) print(kwargs)foo(1,a=2,b=3,c=4)#将1按照位置传值给x,y按照默认参数为1,a=2,b=3,c=4以字典的方式给了kwargs |
执行结果是:
|
1
2
3
|
11{'a': 2, 'b': 3, 'c': 4} |
其中关于**,可以从2个角度来看(需要拆分来看):
1、从形参的角度来看:
示例:
|
1
2
3
|
def foo(**kwargs):#其实就是相当于def foo(y,a,b,c) print(kwargs)foo(y=1,a=2,b=3,c=4) |
执行结果是:
|
1
|
{'y': 1, 'a': 2, 'b': 3, 'c': 4} |
2、从实参的角度来看:
示例一:
|
1
2
3
4
5
6
|
def foo(a,b,c,d): print(a) print(b) print(c) print(d)foo(**{"a":2,"b":3,"c":4,"d":5})#**{"a":2,"b":3,"c":4,"d":5}是将字典里的每个值按照关键字传值的方式传给a,b,c,d |
执行结果是:
|
1
2
3
4
|
2345 |
示例二:
|
1
2
3
4
5
6
|
def foo(a,b,c,d=1): print(a) print(b) print(c) print(d)foo(**{"a":2,"b":3,"c":4})#**{"a":2,"b":3,"c":4}是将字典里的每个值按照关键字传值的方式传给a,b,c;d依旧按照默认参数 |
执行结果是:
|
1
2
3
4
|
2341 |
python函数形参中的*args和**kwargs的更多相关文章
- python函数——形参中的:*args和**kwargs
python函数——形参中的:*args和**kwargs 多个实参,放到一个元组里面,以*开头,可以传多个参数:**是形参中按照关键字传值把多余的传值以字典的方式呈现 *args:(表示的就是将 ...
- 【python】参数中的*args和**kwargs
转自https://www.cnblogs.com/xuyuanyuan123/p/6674645.html#undefined 多个实参,放到一个元组里面,以*开头,可以传多个参数:**是形参中按照 ...
- Python中的args和kwargs
有时,你会看到python中定义函数的时候带有两个奇怪的参数:*args.**kwargs.如果你曾经想知道它们是干什么的,或者想知道你的IDE为什么在main()函数中定义它们,那么本文可以帮助到你 ...
- python函数—形参、实参、位置参数、关键字参数
1.通过def function_name([parameter]): 定义,函数一遇到return即结束运行.如果函数没有定义返回值,则返回None,如果定义了一个返回值,则返回该对象,如果一个re ...
- Python - 函数形参之必填参数、缺省参数、可变参数、关键字参数的详细使用
Python函数形参 必传参数:平时最常用的,必传确定数量的参数 缺省参数:在调用函数时可以传也可以不传,如果不传将使用默认值 可变参数:可变长度参数 关键字参数:长度可变,但是需要以kv对形式传参 ...
- 跟着太白老师学python 10day 函数的动态参数 *args, **kwargs, 形参的位置顺序
1. *args 接收实参的位置参数, **kwargs接收实参的关键字参数 def func(*args, **kwargs): print(args, kwargs) func(1, 2, 3, ...
- python:函数中的*args与**kwargs
首先定义一个包含*args和**kwargs的函数,这个函数唯一的功能就是输出自己的两个参数,以此来理解*args和**kwargs def myFunc(*args, **kwargs): prin ...
- python中的*args与**kwargs的含义与作用
在定义函数的时候参数通常会使用 *args与**kwgs,形参与实参的区别不再赘述,我们来解释一下这两个的作用. *args是非关键字参数,用于元组,**kwargs是关键字参数 (字典)例如下面的代 ...
- 理解 Python 中的 *args 和 **kwargs
Python是支持可变参数的,最简单的方法莫过于使用默认参数,例如: def test_defargs(one, two = 2): print 'Required argument: ', one ...
随机推荐
- jQuery实现日期字符串格式化
1. js仿后台的字符串的StringFormat方法 function StringFormat() { if (arguments.length == 0) return null; var st ...
- Mybatis中的XML中需要用到的转义符号整理
使用这么久的Mybatis中需要转义的符号整理一下,小结一下: 1. < 小于符号 < 2. <= 小于等于 ...
- tiny4412 串口驱动分析四 --- 修改默认的串口输出
作者:彭东林 邮箱:pengdonglin137@163.com 开发板:tiny4412ADK+S700 4GB Flash 主机:Wind7 64位 虚拟机:Vmware+Ubuntu12_04 ...
- Android-Binder 简析
前言 对于Android来说,Binder的重要性怎么说都不为过.不管是我们的四大组件Activity.Service.BroadcastReceiver.ContentProvider,还是经常在应 ...
- VUE的进阶 标签属性数据绑定和拼接
在vue官网把文档扫了一遍后,就开始写网站项目了,没有设计,就百度里找了一个h5的助赢软件的网站把他copy下来,想想有点坏了,接着把内容改改吧.首先开始做一个列表展示vue实例好后,给对象添加默认数 ...
- [置顶]
kubernetes资源类型--deployment
Deployment(中文意思为部署.调度)提供了一种更加简单的更新RC和Pod的机制,K8S版本1.2实现的.通过在Deployment中描述所期望的集群状态,Deployment Controll ...
- linux stdin(0)/ stdout(1) / stderr(2)
在shell中,每个进程都和三个系统文件相关联:标准输入stdin,标准输出stdout.标准错误stderr,三个系统文件的文件描述符分别为0,1.2.进程需要的输入来自stdin文件.进程的标准输 ...
- 在linux下玩转usb摄像头
硬件平台:PC机一台 .usb摄像头 操作系统:Linux3.0.8 交叉编译环境:arm-none-Linux-gnueabi-gcc 4.5.1 调试步骤: 一.linux 内核解压 1.1使用 ...
- python 处理抓取网页乱码问题一招鲜
FROM: http://my.oschina.net/012345678/blog/122355 相信用python的人一定在抓取网页时,被编码问题弄晕过一阵 前几天写了一个测试网页的小脚本,并查找 ...
- python学习心得
一,高级特性: 1,切片:[start:stop:step] >>>l=range() >>>l[,-,] resulte is [] 2,迭代 2.1按iterv ...