packing named arguments into a dict
我知道如果函数接受
1 2 3 4 5 | def bar(**kwargs): return kwargs print bar(a=1, b=2) {'a': 1, 'b': 2} |
但是,情况恰恰相反? 我可以将命名参数打包到字典中并返回它们吗? 手动编码版本如下所示:
1 2 | def foo(a, b): return {'a': a, 'b': b} |
但似乎必须有更好的方法。 请注意,我试图避免在函数中使用
听起来你正在寻找
1 2 3 4 5 6 7 8 9 10 11 | >>> def foo(a, b): ... return locals() ... >>> foo(1, 2) {'b': 2, 'a': 1} >>> def foo(a, b, c, d, e): ... return locals() ... >>> foo(1, 2, 3, 4, 5) {'c': 3, 'b': 2, 'a': 1, 'e': 5, 'd': 4} >>> |
但请注意,这将返回
1 2 3 4 5 6 7 | >>> def foo(a, b): ... x = 3 ... return locals() ... >>> foo(1, 2) {'b': 2, 'a': 1, 'x': 3} >>> |
如果您的功能与问题中给出的功能类似,那么这不应该是一个问题。 但是,如果是,则可以使用
1 2 3 4 5 6 7 8 9 | >>> def foo(a, b): ... import inspect # 'inspect' is a local name ... x = 3 # 'x' is another local name ... args = inspect.getfullargspec(foo).args ... return {k:v for k,v in locals().items() if k in args} ... >>> foo(1, 2) # Only the argument names are returned {'b': 2, 'a': 1} >>> |