python 将函数参数一键转化成字典的技巧,非**kwargs,公有方法和函数抵制kwargs。

一、有时候使用设计模式,例如工厂方法模式,函数传的参数还须要一一根据条件传递到各个类里面去实例化或者其余缘由,直接复制全部的参数看起来不太好,形成不少相同的行。设计模式

 

二、直接函数/方法中写**kwargs,那就不须要转化了,但写代码要抵制这样的写法,这样形成补全困难和使调用者不知道须要传递什么参数,必须去深刻跳转到代码中去才知道须要传递什么东西。最明显的是,requests库的get post函数了,用了*args,**kwargs形成不少小伙伴不知道到底要传些什么参数到函数中,或者知道要传递什么参数,但常常把函数关键字参数拼写错误,好比吧verify拼写成了ferify,headers写成了header,这样写后代码会出错。函数

 

三、例子post

def f(a=1,b=2,c=3):spa

      f2(a,b,c)设计

   f3(a,b,c)get

     f4(a,b,c)pycharm

 

这样写代码很重复,越长越爱出错。requests

正确作法是 key_word_args = locals()io

而后f1(**key_word_args)request

f2(**key_word_args)

f3(**key_word_args)

 

上面说的是函数的例子,若是是方法,那就有一些区别。须要把第一个参数self弹出来

 key_word_args = copy.deepcopy(locals())

 key_word_args.pop('self')

 

而后self.f1(**key_word_args)

self.f2( **key_word_args)

 

四、若是直接写

def f(**kwargs):

      f2(**kwargs)

   f3(**kwargs)

     f4(**kwargs)

 

这样写虽然不须要转化,但做为公有方法,竟然不让用户知道须要传递什么东西,使得pycharm没法补全,这是下下策。个人就是包装了requests的Session,添加了不少方法,使得用起来更简单,并且永远不会出参数名字现拼写错误的状况。

 

五、关键就是要用个locals()获得一个字典,而且这个locals()须要放在函数的第一行,不然日后locals会变多,传递到里面的东西时候,传多了会报错。

相关文章
相关标签/搜索