让我们说我们有一个像
这样的函数声明def myfunc(a=None,b=None):
as_dict = {"a": a,
"b": b,
}
print a * b
some_other_function_that_takes_a_dict(as_dict)
有没有办法将关键字参数捕获为dict而不更改def myfunc(...)
,我的意思是我可以做
def myfunc(**kwargs):
print kwargs['a'] * kwargs['b']
some_other_function_that_takes_a_dict(kwargs)
但是如果我想保持函数签名的清晰度和文档,我还有其他方法可以将关键字参数作为dict。我试图搜索魔法变量等,但我可以看到任何这样做。
要清楚我要搜索类似
的内容def myfunc(a=None,b=None):
print a * b
some_other_function_that_takes_a_dict(__kwargs__)
在python中有某种神奇的__kwargs__
吗?
答案 0 :(得分:3)
如果您的函数中只有kwargs,请使用locals
def my_func(a=None,b=None):
kwargs = locals()
print (kwargs["a"] * kwargs["b"])
In [5]: my_func(10,2)
20
答案 1 :(得分:1)
扩展Padraic Cunningham的答案,使用具有非关键字参数的函数:
from inspect import getargspec
def get_function_kwargs( f, f_locals ):
argspec= getargspec(f)
kwargs_keys = argspec[0][-len(argspec[3]):] #get only arguments with defaults
return {k:f_locals[k] for k in kwargs_keys}
def my_func(a, b=1, c=2):
kwargs= get_function_kwargs( my_func, locals() )
print kwargs
答案 2 :(得分:0)
明确。仅从other
需要的那些变量构建字典。
def myfunc(a=None, b=None):
other({'a': a, 'b': b})