使用相同的字典作为各种函数的参数,有些具有较少的参数

时间:2018-07-12 04:55:55

标签: python dictionary parameters arguments

我有几个函数,它们都包含一堆相同的参数。在其中一些之上,还有其他一些论点。我想将同一个字典传递给他们,但是参数较少的人会抱怨字典中的多余项。

什么是最佳解决方案?将无用的伪参数放入带有较少参数的函数中?

1 个答案:

答案 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