转自:

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. 微信支付开发(1) JS API支付
  2. ios结构体语法
  3. elastic
  4. Android禁止横屏竖屏切换
  5. 每天一道LeetCode--389. Find the Difference
  6. java学习笔记(3):java的工作原理及相关基础
  7. cookie 和 session
  8. 转:CI伪静态化
  9. 使用OpenFiler来模拟存储配置RAC中ASM共享盘及多路径(multipath)的测试
  10. Redis——常见面试题
  11. ubuntu18.04安装mysql
  12. 文件下载Controller,文件夹内容监听,文件上传,运行程序通过url实现文件下载
  13. python时间模块datetime
  14. Xcode编辑器之基本使用(一)
  15. 使用EditPlus编辑Linux上的文本文件
  16. poj3693(后缀数组)
  17. mongo复制集、分片集(亲测)
  18. 关于公众号JavaTokings侵权声明
  19. golang json数组拼接
  20. abp发布需要注意的问题

热门文章

  1. 主成分分析(principal components analysis)
  2. curl的使用(from 阮一峰)
  3. 纠结的链接——ln、ln -s、fs.symlink、require
  4. [Rust] Load a WebAssembly Function Written in Rust and Invoke it from JavaScript
  5. hdu1181 dfs搜索之变形课
  6. SqlServer 经常使用分页方法总结
  7. react 从零开始搭建开发环境
  8. oracle随机数
  9. 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性
  10. 推荐系统(1)--splitting approaches for context-aware recommendation