接受单个dict或dicts列表作为函数参数

时间:2011-09-04 14:44:51

标签: python

我想接受一个dict或一个dicts列表作为函数参数。到目前为止,我已经提出以下内容,但我怀疑我错过了一些完全明显的东西,并且使用了一些脆弱的东西(isinstance):

def wrap(f):
    def enc(inp):
        if isinstance(inp, list):
            for item in inp:
                f(item)
        else:
            f(inp)
    return enc

@wrap
def prt(arg):
    # do something with the dict
    print arg.keys()

2 个答案:

答案 0 :(得分:3)

我会接受可变数量的参数:

def wrap(f):
    def enc(*args):
        for item in args:
            f(item)
    return enc

然后,您可以通过解压缩传递单个词典,多个词典或列表。

请参阅Python教程中的Arbitrary Argument Lists

答案 1 :(得分:2)

我会避免使用装饰器,我认为在ptr函数中处理它的逻辑会更容易:

def prt(arg):
    try:
        # we'll try to use the dict...
        print arg.keys()
    except AttributeError:
        # ok that didn't work, we have a list of dicts
        for d in arg:
            print d.keys()