以编程方式获取函数参数(没有** kwargs)?

时间:2018-01-24 16:19:15

标签: python python-3.x

给出以下功能:

def test(* p1=None, p2=None):
  ...

如下所示:

test(p2="hello")

我可以在运行时以编程方式获取参数的列表/字典及其值吗?

1:不想使用**kwargs,因为我想强制用户使用正确的参数名称(并计划进行类型注释)。

2:我已经查看inspect模块获取默认值,但似乎没有让我看到运行时值。

想要创建像这样的代码:

request = {k: v for k,v in __some_magic_location__ if v is not None}

2 个答案:

答案 0 :(得分:3)

使用locals

>>> def test(*, p1=None, p2=None):
...     return locals()
...
>>> test(p2='hello')
{'p1': None, 'p2': 'hello'}

答案 1 :(得分:0)

您可以使用import inspect def test(*, p1=None, p2=None): pass print(inspect.getcallargs(test, p2 = 'Hello'))

{'p2': 'Hello', 'p1': None}

输出:

/INFO:root:id/