如何在python中确定函数参数类型?

如何在python中确定函数参数类型?,python,types,Python,Types,例如,我有一个文档记录很差的库。我从中得到了一个对象,我想知道某些方法接受的参数类型是什么 在IPython我可以跑步 In [28]: tdb.getData? Signature: tdb.getData(time, point_coords, sinterp=0, tinterp=0, data_set='isotropic1024coarse', getFunction='getVelocity', make_modulo=False) Docstring: <no docstri

例如,我有一个文档记录很差的库。我从中得到了一个对象,我想知道某些方法接受的参数类型是什么

在IPython我可以跑步

In [28]: tdb.getData?
Signature: tdb.getData(time, point_coords, sinterp=0, tinterp=0, data_set='isotropic1024coarse', getFunction='getVelocity', make_modulo=False)
Docstring: <no docstring>
File:      ~/.local/lib/python3.5/site-packages/pyJHTDB/libJHTDB.py
Type:      method
[28]中的
:tdb.getData?
签名:tdb.getData(时间、点坐标、sinterp=0、tinterp=0、数据集='Isomic1024Coarse',getFunction='getVelocity',make_modulo=False)
文档字符串:
文件:~/.local/lib/python3.5/site-packages/pyJHTDB/libJHTDB.py
类型:方法

但它并没有给出论点的类型。我不知道点坐标的确切类型通常,Python中的函数接受任何类型的参数,因此您无法定义它所期望的类型

不过,函数可能确实对接收到的对象做出了一些隐含的假设

以这个函数为例:

def is_long(x):
    return len(x) > 1000
此函数接受哪种类型的参数
x
?任何类型,只要定义了长度即可

因此,它可以接受字符串、列表、dict或您创建的任何自定义对象,只要它实现
\uuu len\uuu
。但不需要整数

is_long('abcd')  # ok
is_long([1, 2, 3, 4])  # ok
is_long(11)  # not ok
回答以下问题:如何判断函数的假设

  • 阅读文档
  • 阅读文档字符串(请尝试
    帮助(funcname)
  • 猜猜:把任何论点传递给它,看看它是如何失败的。如果使用AttributeError失败:X实例没有属性“get\u value”,它需要使用
    get\u value
    的内容

通常,Python中的函数接受任何类型的参数,因此您无法定义它所需要的类型

不过,函数可能确实对接收到的对象做出了一些隐含的假设

以这个函数为例:

def is_long(x):
    return len(x) > 1000
此函数接受哪种类型的参数
x
?任何类型,只要定义了长度即可

因此,它可以接受字符串、列表、dict或您创建的任何自定义对象,只要它实现
\uuu len\uuu
。但不需要整数

is_long('abcd')  # ok
is_long([1, 2, 3, 4])  # ok
is_long(11)  # not ok
回答以下问题:如何判断函数的假设

  • 阅读文档
  • 阅读文档字符串(请尝试
    帮助(funcname)
  • 猜猜:把任何论点传递给它,看看它是如何失败的。如果使用AttributeError失败:X实例没有属性“get\u value”,它需要使用
    get\u value
    的内容

如果它是一个本机python函数,则在C意义上没有严格的名称类型。您甚至可以将火腿三明治作为
point\u coords
传递。除非它使用新的类型注释功能,也就是说,阅读源代码并查找相关注释以及它们试图对参数执行的操作,或者查找用法示例。Github页面显示查看函数,这似乎表明
点坐标
应该是一个float32数据类型的Nx3 NumPy数组。您可以尝试在interactive(
)中使用两个问号而不是一个问号来查看函数定义。Python是动态类型的(),因此任何“看起来”像预期类型的对象都可以用于计算,但这会使您的任务变得困难。您需要浏览代码(可能会找到其他使用者)以了解需求是什么。如果它是本机python函数,则在C意义上没有严格的名称类型。您甚至可以将火腿三明治作为
point\u coords
传递。除非它使用新的类型注释功能,也就是说,阅读源代码并查找相关注释以及它们试图对参数执行的操作,或者查找用法示例。Github页面显示查看函数,这似乎表明
点坐标
应该是一个float32数据类型的Nx3 NumPy数组。您可以尝试在interactive(
)中使用两个问号而不是一个问号来查看函数定义。Python是动态类型的(),因此任何“看起来”像预期类型的对象都可以用于计算,但这会使您的任务变得困难。您需要浏览代码(可能会找到其他用户)以了解需求是什么。