2014-01-06 55 views
4

我希望能够判断一个函数是否在Python 2.7中声明为f()f(**kwargs),所以我知道它是否可以接受任意关键字参数......但invoke.getargspec.args()在两种情况下返回[]。有没有办法做到这一点?在Python 2.7中区分f()和f(** kwargs)

回答

9

您需要查看inspect.getargspec().keywords。如果是None没有**kwargs被给出。

inspect.getargspec() documentation

可变参数关键字是的***参数或None名。

演示:

>>> import inspect 
>>> def foo(): pass 
... 
>>> def bar(**kwargs): pass 
... 
>>> inspect.getargspec(foo).keywords is None 
True 
>>> inspect.getargspec(bar).keywords is None 
False 
>>> inspect.getargspec(bar).keywords 
'kwargs'