在python中将未知的arg和kwarg传递给函数
我有一个对象,它接受函数名func、args和kwargs,并在某个点运行在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,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={}
None
。您是指一个特定的关键字参数吗?如果是这样,您总是可以执行kwargs.get('myarg','default_value')
?很抱歉,不够清晰。添加了一些编辑以提供帮助。我有一个类,它运行一个带有未知参数的任意函数,这些参数在初始化时传递。只是想找出存储这些函数的最佳方法,然后作为类方法的一部分运行函数。啊,我知道有更好的方法。我将args/kwargs作为kwargs本身传递给类(回想起来很愚蠢),并将它们设置为默认值None。谢谢