python:动态参数*args
动态参数
顾名思义,动态参数就是传入的参数的个数是动态的,可以是1个、2个到任意个,还可以是0个。在不需要的时候,你完全可以忽略动态函数,不用给它传递任何值。
Python的动态参数有两种,分别是*args和**kwargs,这里面的关键是一个和两个星号的区别,而不是args和kwargs在名字上的区别,实际上你可以使用*any或**whatever的方式。但就如self一样,默认大家都使用*args和**kwargs。
注意:动态参数,必须放在所有的位置参数和默认参数后面!
def func(name, age, sex='male', *args, **kwargs):
pass
*args
一个星号表示接收任意个参数。调用时,会将实际参数打包成一个元组传入形式参数。如果参数是个列表,会将整个列表当做一个参数传入。例如:
def func(*args):
"""
*表示接收任意个数量的参数,调用时会将实际参数打包为一个元组传入实参
:param args:
:return:
"""
print args for i in args:
print i func({'name': 'kobe'}, 123, 'hello', ['a', 'b', 'c'])
运行结果:
({'name': 'kobe'}, 123, 'hello', ['a', 'b', 'c'])
{'name': 'kobe'}
123
hello
['a', 'b', 'c']
可以看到,先打印了args参数,是一个元组,再分别打印了传入的每个参数。
有时候我们传入一个列表,本意是希望将列表中的所有元素都当做参数传递进去,这里直接将['a', 'b', 'c']看做一个整体了,怎么办?
其实只需要在调用时前面加一个*号,就能实现将列表中的每个元素传递进去了。
其实不光列表,任何序列类型数据对象,比如字符串、元组都可以通过这种方式将内部元素逐一作为参数,传递给函数。而字典,则会将所有的key逐一传递进去。
def func(*args):
"""
*表示接收任意个数量的参数,调用时会将实际参数打包为一个元组传入实参
:param args:
:return:
"""
for i in args:
print i func(*['a', 'b', 'c'])
输出结果:
a
b
c
特别的,调用时只能有一个参数前添加*号,且必须放在最后面
def func(*args):
"""
*表示接收任意个数量的参数,调用时会将实际参数打包为一个元组传入实参
:param args:
:return:
"""
for i in args:
print i func(123, 'hello', ['a', 'b', 'c'], *{'name': 'kobe', 'age': 41})
输出:将字典的key值作为参数传入了
123
hello
['a', 'b', 'c']
age
name
python:动态参数*args的更多相关文章
- python之动态参数 *args,**kwargs和命名空间
一.函数的动态参数 *args,**kwargs, 形参的顺序1.你的函数,为了拓展,对于传入的实参数量应该是不固定,所以就需要用到万能参数,动态参数,*args, **kwargs 1,*args ...
- python之动态参数 *args,**kwargs(聚合,打散--转载
转自https://www.cnblogs.com/ellisonzhang/p/10243122.html 一.函数的动态参数 *args,**kwargs, 形参的顺序 1.你的函数,为了拓展,对 ...
- python之动态参数 *args,**kwargs(聚合,打散)
一.函数的动态参数 *args,**kwargs, 形参的顺序1.你的函数,为了拓展,对于传入的实参数量应该是不固定,所以就需要用到万能参数,动态参数,*args, **kwargs 1,*args ...
- 动态参数(*args,**kwargs),命名空间和作用域,global和nonlocal,函数的嵌套
1. 动态参数 位置参数的动态参数: *args 关键字参数的动态参数 : **kwargs 顺序: 位置,*args,默认值,**kwargs 在形参上*聚合, **聚合 在实参上*打散, **打散 ...
- python可变参数*args, **kwargs
python可变参数*args, **kwargs def foo(* args, ** kwargs): print ' args = ', args print ' kwargs = ', k ...
- python之函数的传参形参的第三种动态参数*args和**kwargs
1. 位置/关键字传参的缺点 当给函数传入的参数数目不定时,之前的传参方式解决不了问题. def eat(food1,food2,food3): print(f'我请你吃:{food1},{food2 ...
- python动态参数
Python的动态参数有两种,分别是*args和**kwargs,这里面的关键是一个和两个星号的区别,而不是args和kwargs在名字上的区别,实际上你可以使用*any或**whatever的方式. ...
- Python可变参数*args和**kwargs
本文我们将通过示例了解 Python函数的可变参数*args和 **kwargs的用法. 知识预备:Python 函数和 Python 函数参数 在Python编程中,我们定义一个函数来生成执行类似操 ...
- Python函数参数*args和**kwargs
1. Python中使用*args和**kwargs #!/usr/bin/env python3 # coding: utf-8 # File: args_kwargs_demo.py # Auth ...
随机推荐
- jsp文件上传下载组件
我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (get方式提交有大小 ...
- 表述数据的手段——json
一.JSON 语法规则 在 JS 语言中,一切都是对象.因此,任何支持的类型都可以通过 JSON 来表示,例如字符串.数字.对象.数组等.但是对象和数组是比较特殊且常用的两种类型: 对象表示为键值对 ...
- pt
https://www.hdarea.co/torrents.php http://hdhome.org/torrents.php https://ourbits.club/torrents.php ...
- luogu P1046 陶陶摘苹果
二次联通门 : luoguP1046 /* 这个题好难..... 由苹果树可知 这应该是个树结构的题 所以很自然的想到了用树链剖分来搞一下 连边 最后查询以1为根节点的子树的权值和... 从前闲的没事 ...
- vundle 管理插件
前言:如果不使用vundle的话,进行插件的安装,配置和管理相对会麻烦,曾经没使用vundle的时候我经常遇到无法安装一些vim插件.但使用vundle后你只要在文件中添加一行你的插件名再安装就OK了 ...
- vim的四大模式
vim的四大模式 总结了下我经常使用的模式中的一些基本命令 正常模式 通过vim进入到界面, 首次即为正常模式 编辑模式 (i,a,o,s,I,A,S) i: 当前节点插入光标点 a: 下一个字母后插 ...
- mysql创建账号、授权、数据导出、导入
1.账号创建及授权 grant all privileges on *.* to 'yangxin'@'%' identified by 'yangxin123456' with grant opti ...
- html同行两个div浮动后下一个div怎么换行的问题
传送门:https://blog.csdn.net/asdfg6541/article/details/78514535
- C# MVC Ajax上传多个图片,可预览,可重复上传等
//上传文件 function UploadFile(el) { var dataValue = $(el).attr("data-id"); var ele = dataValu ...
- PHP7 MongoDB 使用方法
原文链接: http://www.zhaokeli.com/article/8574.html MongoDb原生操作 Mongodb连接 PHP7 连接 MongoDB 语法如下: 复制代码 $ma ...