获取Python中参数的类型

12 投票
5 回答
15549 浏览
提问于 2025-04-15 19:03

我正在学习Python。我喜欢在命令行中使用help()或者interinspect.getargspec来获取函数的信息。但是有没有什么方法可以让我知道函数的参数类型和返回值类型呢?

5 个回答

5

如果你是说在函数被调用的时候,函数本身可以通过对每个参数使用 type 来获取它们的类型(而且它肯定知道自己返回的是什么类型)。

如果你是说在函数外部,那就不行:函数可以用任何类型的参数来调用——有些调用会出错,但事先无法知道哪些会出错。

在Python 3中,参数可以选择性地添加一些装饰,使用这种装饰的一种可能方式是表达参数的类型(或者其他限制),但是语言和标准库并没有提供如何使用这种装饰的指导。你也可以采用一种标准,把这些限制以结构化的方式写在函数的文档字符串中,这样做的好处是适用于任何版本的Python。

9

在3.4.2的文档中,提到了一些你需要了解的内容(也就是如何获取一个函数的参数类型)。

首先,你需要像这样定义你的函数:

def f(a: int, b: float, c: dict, d: list, <and so on depending on number of parameters and their types>):

然后你可以使用 formatargspec(*getfullargspec(f)),这个方法会返回一个看起来不错的哈希值,像这样:

(a: int, b: float)
10

formatargspec 从 3.5 版本开始就不推荐使用了,建议使用 signature

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
...     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

注意: 在某些 Python 的实现中,有些可调用的对象可能无法被检查。例如,在 CPython 中,一些用 C 语言定义的内置函数并没有提供关于它们参数的任何信息。

撰写回答