【问题标题】:How to find the required arguments of a function object in python?如何在python中找到函数对象的所需参数?
【发布时间】:2019-10-28 20:37:41
【问题描述】:

我有一个函数,f

def f(required_arg, optional_arg=None):
    pass

如何返回f必需参数名称列表?

inspect.signature 的结果上使用isinstance 似乎不起作用:

>>> import inspect 
>>> params = inspect.signature(f).parameters    
>>> for arg_name, v in params.items():
>>>     print(v.default)
>>>     print(arg_name, isinstance(v.default, inspect._empty))
>>>     print(arg_name, isinstance(v.default, inspect.Parameter.empty))
<class 'inspect._empty'>
required_arg False
required_arg False
None
optional_arg False
optional_arg False

【问题讨论】:

  • @GreekCloakGuy 是的,在我的情况下这根本行不通。我正在开发一个 unittest 元类,它动态添加测试并且需要知道需要哪些参数,以便如果参数未包含在类定义中,我可以自动使特定测试失败。
  • 经过一些测试,您是否尝试过检查v.default == inspect._empty 而不是isinstance(v.default, inspect._empty)?如,值实际上是类本身,而不是类的实例,或者从我的一些实验看来是这样
  • @GreenCloakGuy 是的,谢谢。我猜推荐的方法是使用is 而不是==,但我想不出使用比较有什么缺点。

标签: python python-3.x


【解决方案1】:

这是@GreenCloakGuy 在他的评论中提到的一个例子:

def f(required_arg, optional_arg=None):
    """Directive on what this function is intended to accomplish.

    Args:
        required_arg (str): Argument used to ... thing.
        optional_arg (str): Argument used to ... other thing.

    """
    pass

调用help(f) 将为用户生成以下输出:

输出:

Help on function f in module __main__:

f(required_arg, optional_arg=None)
    Directive on what this function is intended to accomplish.

    Args:
        required_arg (str): Argument used to ... thing.
        optional_arg (str): Argument used to ... other thing.

【讨论】:

  • 这可能会帮助其他人提出这个问题,但绝对不会对我的情况有所帮助。请参阅我的问题下的评论以获得解释。
  • @ReinstateMonica - 明白了。我会留下答案,以防它可以帮助其他人。抱歉,这不是你想要的。
【解决方案2】:

您应该使用is 而不是isinstance

>>> import inspect 
>>> params = inspect.signature(f).parameters    
>>> for arg_name, v in params.items():
>>>     print(v.default is inspect._empty)
True
False

【讨论】:

    猜你喜欢
    • 2016-04-02
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    相关资源
    最近更新 更多