当需要给函数传参时,可以通过运用不同的形参来传递,达到参数不同的使用目的。
简单来说:f_arg就是传递的第一个参数,类似于C++中的普通参数; *args 传递的是一个参数的list; **kwargs 传递的是一个有key的dict。
下面通过一个例子来说明这三个参数的区别。
def generator_function(f_args,*args ,**kwargs): yield f_args for arg in args: yield ("arg in *args:", arg) for key,value in kwargs.items(): yield(" %s==%s in **kwargs:"%(key, value)) for item in generator_function(123,"hello","haha",3421,asd=123,fff="433"): print(item)
结果:
123 ('arg in *args:', 'hello') ('arg in *args:', 'haha') ('arg in *args:', 3421) fff==433 in **kwargs: asd==123 in **kwargs:
什么情况下使用 *args ,**kwargs?
比如一个定时产出的自动化程序,需要指定日期和时间去运行,同时有几种版本或者模式。
就可以指定key等于不同的值,传入main函数中,来控制程序按照指定的模式运行了。
例如:有一个小时级的文本挖掘程序, 可以设定两个key: date , interval,
通过传入参数: date="2016-09-10" , interval ="1", 指定挖掘2016年9月10日的数据,同时一个小时挖掘一次。 如果传入 interval = "8", 指定8小时挖掘一次。