说白了就是传递参数作用,而且是当你不确定你可能对这方法传递多少个参数的时候,所以一般我们都会带上这两个东西
1.首先,我先告诉大家一个事实,完整地写args和**kwargs是不必要的,我们可以只写和**。你也可以写var和**vars。写args和**kwargs只是一个大家都遵守的习惯。
2.其次两者的区别,*arg是传递一列表的参数,而 *kwargs则是传递一字典的参数.
什么时候我们会未知我们会需要多少参数呢?写一个函数不是应该都知道有哪些参数了吗?下面是一个列子。我们有两个方法,两个方法的参数是不一样的,有时候我们想用第一个有时候想用第二个,那么参数本身就不同,所以如果用一个方法作为入口的话,那么我们就需要用上面的方法了。
def method1(a,b,c,name=None):
print(a)
print(b)
print(c)
print(name)
print('------------------')
def method2(a,c,d,Name=None,age=None):
print(a)
print(c)
print(d)
print(Name)
print(age)
print('------------------')
__model_factory = {
'm1':method1,
'm2':method2
}
def init_model(name, *args, **kwargs):
if name not in list(__model_factory.keys()):
raise KeyError("Unknown model: {}".format(name))
return __model_factory[name](*args, **kwargs)
if __name__=='__main__':
init_model('m1',1,2,3,'shawn')
init_model('m2',1,2,3,'shawn',18)