python 中参数*args, **kwargs

def foo(*args, **kwargs):
print 'args = ', args
print 'kwargs = ', kwargs
print '---------------------------------------'if __name__ == '__main__':
foo(1,2,3,4)
foo(a=1,b=2,c=3)
foo(1,2,3,4, a=1,b=2,c=3)
foo('a', 1, None, a=1, b='2', c=3)输出结果如下:args =  (1, 2, 3, 4)
kwargs =  {} args =  ()
kwargs =  {'a': 1, 'c': 3, 'b': 2} args =  (1, 2, 3, 4)
kwargs =  {'a': 1, 'c': 3, 'b': 2} args =  ('a', 1, None)
kwargs =  {'a': 1, 'c': 3, 'b': '2'}

可以看到,这两个是python中的可变参数。*args表示任何多个无名参数,它是一个tuple;**kwargs表示关键字参数,它是一个 dict。并且同时使用*args和**kwargs时,必须*args参数列要在**kwargs前,像foo(a=1, b='2', c=3, a', 1, None, )这样调用的话,会提示语法错误“SyntaxError: non-keyword arg after keyword arg”。

-------------------------------------------------------------------------------------------

class testClass:
def __init__(self, **kwargs):
self.kwargs = kwargs
def print_kwargs(self):
i = 1
for key in self.kwargs.keys():
print "Kwarg %s (%s: %s)" % (i, key, self.kwargs[key])
i += 1
tc = testClass(hello=True, anumber=5, thisisgreat='Yes it is!')
tc.print_kwargs()

--------------------------------------------------------------------------------------------

Using **kwargs and default values is easy. Sometimes, however, you shouldn't be using **kwargs in the first place.

In this case, we're not really making best use of **kwargs.

class ExampleClass( object ):def __init__(self, **kwargs):self.val = kwargs.get('val',"default1")self.val2 = kwargs.get('val2',"default2")The above is a "why bother?" declaration. It is the same asclass ExampleClass( object ):def __init__(self, val="default1", val2="default2"):self.val = valself.val2 = val2

When you're using **kwargs, you mean that a keyword is not just optional, but conditional. There are more complex rules than simple default values.

When you're using **kwargs, you usually mean something more like the following, where simple defaults don't apply.

class ExampleClass( object ):def __init__(self, **kwargs):self.val = "default1"self.val2 = "default2"if "val" in kwargs:self.val = kwargs["val"]self.val2 = 2*self.valelif "val2" in kwargs:self.val2 = kwargs["val2"]self.val = self.val2 / 2else:raise TypeError( "must provide val= or val2= parameter values" )

*args, **kwargs的用法相关推荐

  1. python 元组传参 *args 字典传参 **kwargs 的用法

    python 元组传参 *args 字典传参 **kwargs 的用法 # 元组参数 def func_arg(*args):print("args:", args) func_a ...

  2. python * args和** kwargs的用法

    所属网站分类: python基础 > 函数 作者:慧雅 链接: http://www.pythonheidong.com/blog/article/18/ 来源:python黑洞网 www.py ...

  3. python kwargs是什么参数_Python中*args 和 **kwargs的用法总结

    对于大部分Python新手来说,*args和**kwargs这两个魔法变量需要花大量的时间来解释.那么它们到底是什么呢?在什么时候使用它们呢?要搞清楚这些问题,首先你要明白,其实并不是必须写成*arg ...

  4. *args 和 **kwargs的用法

    *args 的用法 *args 和 **kwargs 主要用于函数定义. 你可以将不定数量的参数传递给一个函数. 这里的不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下 ...

  5. Python中*args 和**kwargs的用法探讨

    当函数的参数不确定时,可以使用*args 和**kwargs,*args 没有key值,**kwargs有key值.不确定的意思可以是有,有几个,也可以是没有 *args可以当作可容纳多个变量组成的l ...

  6. 风云编程python-Python中*args 和**kwargs的用法

    刚开始学习python的时候,对有关args,kwargs,和*的使用感到很困惑.相信对此感到疑惑的人也有很多.我打算通过这个帖子来排解这个疑惑(希望能减少疑惑). 让我们通过以下5步来理解: 1. ...

  7. 【Python】*args 和 **kwargs的用法

    一 简介 *args 和 **kwargs 主要用于函数定义. 当我们需要定义的函数的传入参数个数不确定时,可以使用*args 和 **kwargs 代替不确定的参数个数.其实并不是必须写成*args ...

  8. Python中*args 和**kwargs的用法

    刚开始学习python的时候,对有关args,kwargs,和*的使用感到很困惑.相信对此感到疑惑的人也有很多.我打算通过这个帖子来排解这个疑惑(希望能减少疑惑). 让我们通过以下5步来理解:  1. ...

  9. python *args用法_python函数参数*args**kwargs用法实例

    #coding=utf8 __author__ = 'Administrator' # 当函数的参数不确定时,可以使用*args和**kwargs.*args没有key值,**kwargs有key值 ...

最新文章

  1. 惠普打印机节能环保认证证书_爱普生和惠普家用打印机哪款好 爱普生和惠普家用打印机对比【区别】...
  2. Java 内存分配——Thinking in Java 4th 读书笔记
  3. 中国稀土永磁材料市场发展态势及产销需求规模预测报告2021版
  4. Windows下 jupyter notebook 运行multiprocessing 报错的问题与解决方法
  5. Quartz业务类无法注入Spring对象问题
  6. 数据结构的简要介绍:堆栈如何工作
  7. linux 内核定时器精度_linux使用select实现精确定时器详解
  8. 大数据之_Hadoop工作笔记001---Hadoop3.1.2在Centos7上安装_单机版
  9. 基于springboot+thymeleaf+mybatis的员工管理系统 —— 增删改查
  10. 横向导出excel_万能转换:R图和统计表转成发表级的Word、PPT、Excel、HTML、Latex、矢量图等...
  11. Atitit 设计模式之道 艾提拉著 sbb 目录 1. 一、设计模式的分类 1 1.1. 总体来说设计模式分为三大类: 1 1.2. 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建
  12. 信息系统开发与利用 领域分析部分@wangshushu
  13. 2年CFA三级考试连过的我,全靠笔记多!(无金融背景)
  14. 20145322何志威 《信息安全系统设计基础》第2周学习总结
  15. css3实现图片划过一束光闪过效果(图片光影掠过效果)
  16. 函数/极限/导数的概念辨析
  17. Ajax异步配合数据字典完成下拉选框
  18. 浅谈网络劫持的原理及影响
  19. 有趣的灵魂用有趣的屏保SadMac.saver
  20. Cannot write to ‘’ (Success) 解决办法

热门文章

  1. 2011年度最佳代码“不管你们信不信,我反正信了”
  2. RTP格式图 NNEXB格式和RTP格式
  3. 前后端分离工程实现 (VUE、JAVA)、附全部源码
  4. 刷新SWAP分区方法
  5. 并发编程(多进程1)
  6. Flask WTForm表单的使用
  7. Netty自娱自乐之协议栈设计
  8. 渐变色--浏览器兼容性
  9. 自己动手焊制硬件开发板
  10. 使用ifconfig取出网卡eth0的ip地址