Ksh*_*ogi 0 python parameters arguments function
我有一个函数/方法A()需要一些参数(包括可选参数).另一个功能B()是对要传递给所述功能的数据进行预处理A().我几乎没有该功能的替代实现,B()这使我对一个优于另一个的优点感到困惑.我想了解我应该使用哪些(如果有的话).
毕竟, There should be one-- and preferably only one --obvious way to do it.
这是代码片段:
class Foo(object):
def __init__(self, param1, param2, param3=None):
self.param1 = param1
self.param2 = param2
self.param3 = param3
@classmethod
def from_dump_v1(cls, dump):
param1, param2, param3 = dump.get('param_1'), dump.get('_param_2'), dump.get('paramThree')
return cls(param1, param2, param3)
@classmethod
def from_dump_v2(cls, dump):
dump['param1'] = dump.pop('param_1')
dump['param2'] = dump.pop('_param_2')
dump['param3'] = dump.pop('paramThree')
return cls(**dump)
@classmethod
def from_dump_v3(cls, dump):
result = dict()
result['param1'] = dump.get('param_1')
result['param2'] = dump.get('_param_2')
result['param3'] = dump.get('paramThree')
return cls(**result)
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,__init__引用A()并from_dump_v*表示我需要选择的不同实现.
注:在所有的情况下,dump与3键-值对,即一本字典param_1,_param_2和paramThree.
一个显而易见的方法是:
@classmethod
def from_dump_v(cls, dump):
return cls(**{k.replace('_', ''): v for k, v in dump.items()})
Run Code Online (Sandbox Code Playgroud)
在dumpdict持有任意键的情况下,我看不出一个明显的方法来做到这一点; 我不是荷兰人.
但是,通过对工厂函数的参数进行一些控制,您可以将数据类型更改为序列而不是dict,然后执行以下操作enumerate:
@classmethod
def from_dump_v(cls, dump):
return cls(**{"param{}".format(i): x for i, x in enumerate(dump, 1)})
Run Code Online (Sandbox Code Playgroud)