2016-10-31 217 views
2

比方说,我们有一个功能foo(a, b),它是Python模块的公共API的一部分。
有什么方法可以查询该函数期望的ab的类型吗?
我知道我可以通过inspect模块获得参数的数量和它们的默认值,但是有没有可用的类型信息?有没有办法获得函数参数的类型?

+0

不,默认情况下不是。你应该相信你的程序员,或者尽可能早地在你的函数中失败。另外,记录你的公共API。 – jbndlr

+0

用'foo .__ doc__'检查函数的文档字符串这应该包含您要查找的信息,但不能保证。问题在于Python不会将变量强制为某种类型。例如,你可以尝试将一个字符串传递给'sqrt',例如,直到运行时才会发生错误 –

回答

6

Python是一种动态类型语言,所以没有;一个功能应该是文件而不是他们的期望。

Python 3.5及更高版本的支持optional type hinting;如果库使用类型提示,则可以使用typing.get_type_hints() function查询此信息以编程方式访问该信息。

通常,Python函数应该接受实现预期功能而不是特定类型的对象。如果函数遍历一个序列来提取字符串,那么它应该被记录为接受(以类型暗示术语)一个对象,而不是一个列表或元组或其他特定类型。

+2

此外,它不是参数的*类型*,而是它的可用/实现*方法*,使它适合作为一个特定函数的参数,因为python使用** duck-typing **。 – jbndlr

相关问题