我想接受一个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()
答案 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()