【发布时间】:2016-03-15 02:11:48
【问题描述】:
我有时会面临这种困境。假设我有这样的功能:
def foo(..., **kwargs):
...
actor = make_actor(..., **a_kwargs)
return actor.act(..., **b_kwargs)
我想让调用者指定 kwargs 传递给 make_actor() (a_kwargs) 和 act() (b_kwargs)。当然,问题是foo 只能接受**kwargs 一次。
(在几乎所有情况下 a_kwargs 和 b_kwargs 不共享公共键,因此我们无需担心参数名称冲突)。
我可以想到几种方法,每种方法都有其明显的缺点/限制。
def foo1(..., **kwargs):
...
a_kwargs = {k:kwargs.pop(k) for k in kwargs.keys() if k in ['arg1','arg2',...]}
actor = make_actor(..., **a_kwargs)
return actor.act(..., **kwargs)
def foo2(..., arg1=DEFAULT1, arg2=DEFAULT2, ..., **b_kwargs):
...
actor = make_actor(..., arg1=arg1, arg2=arg2, ...)
return actor.act(..., **b_kwargs)
def foo3(..., a_kwargs={}, **b_kwargs):
...
actor = make_actor(..., **a_kwargs)
return actor.act(..., **b_kwargs)
def foo4(..., a_kwargs={}, b_kwargs={}):
...
actor = make_actor(..., **a_kwargs)
return actor.act(..., **b_kwargs)
哪个是最蟒蛇的?还有其他我忽略的方法优于上述四种方法吗?
在一般情况下,我们可能希望拆分 kwarg 以传递给两个以上的其他函数。
【问题讨论】:
标签: python arguments parameter-passing keyword-argument