python 如何查看一个函数的所有参数信息

ponponon
  • 1.5k

比如有一个需求,我需要知道一个函数的参数信息,如果获取?

是在程序里判断,不是去看代码那种

比如下面的例子,我有一个 parse_params 专门用来对 func obj 的 params 做校验:

from loguru import logger
from typing import Callable


def haha(a: int, b: str, c=1, **kwages) -> int:
    pass


def parse_params(func: Callable):
    """ 分析目标函数的参数信息 """
    logger.debug(func.__annotations__)

parse_params(haha)

本来想用 func obj 的 __annotations__ 属性,但是这个不显示没有 typing hint 的参数

最好能把返回值也带上
回复
阅读 496
1 个回答
Mannix
  • 1.4k
✓ 已被采纳

Signature 看看这个满不满足需求

from inspect import signature


def haha(a: int, b: str, c=1, **kwargs) -> int:
    pass


haha_sign = signature(haha)
print(haha_sign)  # (a:int, b:str, c=1, **kwargs) -> int
print(haha_sign.parameters)  # OrderedDict([('a', <Parameter "a:int">), ('b', <Parameter "b:str">), ('c', <Parameter "c=1">), ('kwargs', <Parameter "**kwargs">)])
print(haha_sign.return_annotation)  # <class 'int'>

可以获取参数的详细信息

for param in haha_sign.parameters.values():
    print(
        param.name,
        param.kind,  # 位置/关键词/位置或关键词/可变位置/可变关键词
        param.annotation,  # 类型注解,没有默认 inspect.Parameter.empty(可用 type(param.default) 获取默认值类型)
        param.default  # 默认值,没有默认 inspect.Parameter.empty
    )
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏