详解Python的*args和 **kwargs
2024-08-30 18:27:19
转自:
http://www.python[tab].com/html/2016/pythonhexinbiancheng_0802/1057.html
*args表示任何多个无名参数,它是一个tuple;**kwargs表示关键字参数,它是一个dict。
def fun(*args, **kwargs):
print 'args = ', args
print 'kwargs = ', kwargs
print '###\n'
if __name__ == '__main__':
fun(1,2,3,4)
fun(a=1,b=2,c=3)
fun(1,2,3,4, a=1,b=2,c=3)
fun('a', 1, None, a=1, b='', c=3)
运行结果:
###
args = (1, 2, 3, 4)
kwargs = {}
### ###
args = ()
kwargs = {'a': 1, 'b': 2, 'c': 3}
### ###
args = (1, 2, 3, 4)
kwargs = {'a': 1, 'b': 2, 'c': 3}
### ###
args = ('a', 1, None)
kwargs = {'a': 1, 'b': '', 'c': 3}
###
可以看到,这两个是python中的可变参数。
注意:同时使用*args和**kwargs时,必须*args参数列要在**kwargs前,像foo(a=1, b='2', c=3, a', 1, None, )这样调用的话,会提示语法错误“SyntaxError: non-keyword arg after keyword arg”。
def fun2(param1, *args, **kwargs):
print 'param1 = ', param1
print 'args = ', args
print 'kwargs = ', kwargs
print '###'
fun2(1, 2, 3, 4, a=1,b=2,c=3)
输出结果:
param1 = 1
args = (2,3,4)
kwargs = {'a': 1, 'c': 3, 'b': 2}
###
1赋值给了param1, 剩下的2,3,4给了*args, 其他的都赋值给了**kwargs
还有一个很漂亮的用法,就是创建字典:
def kw_dict(**kwargs):
return kwargs
print kw_dict(a=1,b=2,c=3)
结果:
{'a':1, 'b':2, 'c':3}
其实python中就带有dict类,使用dict(a=1,b=2,c=3)即可创建一个字典了。
最新文章
- 微信支付开发(1) JS API支付
- ios结构体语法
- elastic
- Android禁止横屏竖屏切换
- 每天一道LeetCode--389. Find the Difference
- java学习笔记(3):java的工作原理及相关基础
- cookie 和 session
- 转:CI伪静态化
- 使用OpenFiler来模拟存储配置RAC中ASM共享盘及多路径(multipath)的测试
- Redis——常见面试题
- ubuntu18.04安装mysql
- 文件下载Controller,文件夹内容监听,文件上传,运行程序通过url实现文件下载
- python时间模块datetime
- Xcode编辑器之基本使用(一)
- 使用EditPlus编辑Linux上的文本文件
- poj3693(后缀数组)
- mongo复制集、分片集(亲测)
- 关于公众号JavaTokings侵权声明
- golang json数组拼接
- abp发布需要注意的问题
热门文章
- 主成分分析(principal components analysis)
- curl的使用(from 阮一峰)
- 纠结的链接——ln、ln -s、fs.symlink、require
- [Rust] Load a WebAssembly Function Written in Rust and Invoke it from JavaScript
- hdu1181 dfs搜索之变形课
- SqlServer 经常使用分页方法总结
- react 从零开始搭建开发环境
- oracle随机数
- 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性
- 推荐系统(1)--splitting approaches for context-aware recommendation