在python中将未知的arg和kwarg传递给函数

在python中将未知的arg和kwarg传递给函数,python,Python,我有一个对象,它接受函数名func、args和kwargs,并在某个点运行 func(*args, **kwargs) 问题是,如果func不需要args/kwargs,args/kwargs默认为None,这会导致类型错误。例如,如果函数不需要参数,则args、kwargs默认为无: def test(): pass args = None kwargs = None test(*args, **kwargs) ---------------------------------

我有一个对象,它接受函数名func、args和kwargs,并在某个点运行

func(*args, **kwargs)
问题是,如果func不需要args/kwargs,args/kwargs默认为None,这会导致类型错误。例如,如果函数不需要参数,则args、kwargs默认为无:

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
def test():
通过
args=None
kwargs=无
测试(*args,**kwargs)
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在()
---->1个测试(*args,**kwargs)
TypeError:**后面的test()参数必须是映射,而不是非非类型
我相信有一种很好的方法可以解决这个问题,而不用级联if语句来检查args/kwargs是否存在,每个args都有自己的函数调用,但我不确定如何实现。主要目标是将函数及其未知参数传递给对象,对象随后将在方法中使用它们

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

问题是,如果func不需要args/kwargs,args/kwargs默认为None,这会导致类型错误

事实并非如此:

def func1(*args, **kwargs)
    print args, kwargs
将打印

() {}
反过来说

def func2(): pass
完全可以称之为

func2(*(), **{})

因此,只要更改
args
kwargs
变量,就可以了。

避免将
args
kwargs
默认为
None

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

你说“Python不喜欢那样”是什么意思?它会引发异常吗?你能在这里写下你的级联if语句吗?我们可以帮助你改进它们!如果调用函数时未提供任何参数,args和kwargs将为空,但不是
None
。您是指一个特定的关键字参数吗?如果是这样,您总是可以执行
kwargs.get('myarg','default_value')
?很抱歉,不够清晰。添加了一些编辑以提供帮助。我有一个类,它运行一个带有未知参数的任意函数,这些参数在初始化时传递。只是想找出存储这些函数的最佳方法,然后作为类方法的一部分运行函数。啊,我知道有更好的方法。我将args/kwargs作为kwargs本身传递给类(回想起来很愚蠢),并将它们设置为默认值None。谢谢