获取Python中参数的类型
我正在学习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 语言定义的内置函数并没有提供关于它们参数的任何信息。