传递未知的args和kwargs在python中运行

时间:2013-07-26 15:07:50

标签: python

我有一个接受函数名称func,args和kwargs的对象,并且在某些时候运行

func(*args, **kwargs)

问题是,如果func不需要args / kwargs,则args / kwargs默认为None,这会导致TypeError。例如,如果函数不需要参数,则args,kwargs默认为None:

def test():
    pass

args = None

kwargs = None

test(*args, **kwargs)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-4-b9618694fbf2> in <module>()
----> 1 test(*args, **kwargs)

TypeError: test() argument after ** must be a mapping, not NoneType

我确信有一个很好的方法可以解决这个问题,如果没有级联if语句检查是否存在args / kwargs,每个都有自己的函数调用,但我不知道如何。主要目标是将一个函数及其未知参数传递给一个对象,然后在一个方法中使用它们。

已编辑:为清晰起见添加了一个示例

2 个答案:

答案 0 :(得分:8)

  

问题是,如果func不需要args / kwargs,则args / kwargs默认为None,这会导致TypeError。

事实并非如此:

def func1(*args, **kwargs)
    print args, kwargs

将打印

() {}

相反,

def func2(): pass

可以完美地调用

func2(*(), **{})

所以只需更改您的argskwargs变量即可。

答案 1 :(得分:1)

避免将您的argskwargs默认为None

  • args应该是一个元组:args = ()
  • kwargs应该是一个词典:kwargs = {}