*args, **kwargs的用法
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的用法相关推荐
- python 元组传参 *args 字典传参 **kwargs 的用法
python 元组传参 *args 字典传参 **kwargs 的用法 # 元组参数 def func_arg(*args):print("args:", args) func_a ...
- python * args和** kwargs的用法
所属网站分类: python基础 > 函数 作者:慧雅 链接: http://www.pythonheidong.com/blog/article/18/ 来源:python黑洞网 www.py ...
- python kwargs是什么参数_Python中*args 和 **kwargs的用法总结
对于大部分Python新手来说,*args和**kwargs这两个魔法变量需要花大量的时间来解释.那么它们到底是什么呢?在什么时候使用它们呢?要搞清楚这些问题,首先你要明白,其实并不是必须写成*arg ...
- *args 和 **kwargs的用法
*args 的用法 *args 和 **kwargs 主要用于函数定义. 你可以将不定数量的参数传递给一个函数. 这里的不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下 ...
- Python中*args 和**kwargs的用法探讨
当函数的参数不确定时,可以使用*args 和**kwargs,*args 没有key值,**kwargs有key值.不确定的意思可以是有,有几个,也可以是没有 *args可以当作可容纳多个变量组成的l ...
- 风云编程python-Python中*args 和**kwargs的用法
刚开始学习python的时候,对有关args,kwargs,和*的使用感到很困惑.相信对此感到疑惑的人也有很多.我打算通过这个帖子来排解这个疑惑(希望能减少疑惑). 让我们通过以下5步来理解: 1. ...
- 【Python】*args 和 **kwargs的用法
一 简介 *args 和 **kwargs 主要用于函数定义. 当我们需要定义的函数的传入参数个数不确定时,可以使用*args 和 **kwargs 代替不确定的参数个数.其实并不是必须写成*args ...
- Python中*args 和**kwargs的用法
刚开始学习python的时候,对有关args,kwargs,和*的使用感到很困惑.相信对此感到疑惑的人也有很多.我打算通过这个帖子来排解这个疑惑(希望能减少疑惑). 让我们通过以下5步来理解: 1. ...
- python *args用法_python函数参数*args**kwargs用法实例
#coding=utf8 __author__ = 'Administrator' # 当函数的参数不确定时,可以使用*args和**kwargs.*args没有key值,**kwargs有key值 ...
最新文章
- 惠普打印机节能环保认证证书_爱普生和惠普家用打印机哪款好 爱普生和惠普家用打印机对比【区别】...
- Java 内存分配——Thinking in Java 4th 读书笔记
- 中国稀土永磁材料市场发展态势及产销需求规模预测报告2021版
- Windows下 jupyter notebook 运行multiprocessing 报错的问题与解决方法
- Quartz业务类无法注入Spring对象问题
- 数据结构的简要介绍:堆栈如何工作
- linux 内核定时器精度_linux使用select实现精确定时器详解
- 大数据之_Hadoop工作笔记001---Hadoop3.1.2在Centos7上安装_单机版
- 基于springboot+thymeleaf+mybatis的员工管理系统 —— 增删改查
- 横向导出excel_万能转换:R图和统计表转成发表级的Word、PPT、Excel、HTML、Latex、矢量图等...
- Atitit 设计模式之道 艾提拉著 sbb 目录 1. 一、设计模式的分类	1 1.1. 总体来说设计模式分为三大类:	1 1.2. 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建
- 信息系统开发与利用 领域分析部分@wangshushu
- 2年CFA三级考试连过的我,全靠笔记多!(无金融背景)
- 20145322何志威 《信息安全系统设计基础》第2周学习总结
- css3实现图片划过一束光闪过效果(图片光影掠过效果)
- 函数/极限/导数的概念辨析
- Ajax异步配合数据字典完成下拉选框
- 浅谈网络劫持的原理及影响
- 有趣的灵魂用有趣的屏保SadMac.saver
- Cannot write to ‘’ (Success) 解决办法