我有几个函数,它们都包含一堆相同的参数。在其中一些之上,还有其他一些论点。我想将同一个字典传递给他们,但是参数较少的人会抱怨字典中的多余项。
什么是最佳解决方案?将无用的伪参数放入带有较少参数的函数中?
答案 0 :(得分:1)
制作简单的装饰器,该装饰器将使用inspect
模块获取功能参数列表。这将为您提供示例:
import inspect
def take_many_arguments(fn):
origf = fn
def _f(*arg, **args):
new_args = {}
for a in inspect.getargspec(origf).args:
if a not in args:
continue
new_args[a] = args[a]
return origf(*arg, **new_args)
return _f
class C:
@take_many_arguments
def fn1(self, a):
print(a)
@take_many_arguments
def fn2(self, a, b):
print(a, b)
@take_many_arguments
def fn3(self, a, b, c):
print(a, b, c)
@take_many_arguments
def fn4(a, b):
print(a, b)
d = {'a': 1, 'b': 2, 'c': 3}
# for classes:
c = C()
c.fn1('Normal call')
c.fn1(**d)
c.fn2(**d)
c.fn3(**d)
# for functions:
fn4(9, 8)
fn4(**d)
输出:
Normal call
1
1 2
1 2 3
9 8
1 2