无法调用需要双列表的函数
Cannot call function that expects list of double
我正在测试 python 库,它是 SWIG 包装器。
这个库中的一个函数是:
def point_inside(self, *args) -> "bool":
return _vulcanpy.TRI_triangulation_t_point_inside(self, *args)
据我所知,这个函数应该采用双精度或三个双精度的列表。
当我用三个数字调用它时,它起作用了:
>>> tri.point_inside(100,100,100)
True
当我用数字列表调用它时,它失败了:
>>> tri.point_inside([100,100,100])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Program Files\Maptek\Vulcan 10.1\bin\exe\lib\site-packages\vulcan.py", line 1551, in point_inside
return _vulcanpy.TRI_triangulation_t_point_inside(self, *args)
NotImplementedError: Wrong number or type of arguments for overloaded function 'TRI_triangulation_t_point_inside'.
Possible C/C++ prototypes are:
TRI_triangulation_t::point_inside(double_list)
TRI_triangulation_t::point_inside(double,double,double)
我是否缺少某些正确调用第二个重载的语法?
不确定这是否有用,但是当我调用 returns double 列表的不同函数时,我得到了明显的结果。
def get_elevations(self, x: 'double', y: 'double') -> "double_list":
return _vulcanpy.TRI_triangulation_t_get_elevations(self, x, y)
>>> tri.get_elevations(100,100)
[88.0, 88.0, 112.0, 112.0]
*args
表示接受一系列参数,然后在函数定义中使用时将它们包装到一个变量 args
中。并且意味着在传递参数时使用时解包所有参数。
在您的第一个示例中,args=(100, 100, 100)
,因此调用 _vulcanpy.TRI_triangulation_t_point_inside(self, *args)
等于 _vulcanpy.TRI_triangulation_t_point_inside(self, 100, 100, 100)
。
在你的第二个例子中,如果我理解你的话,你希望它只使用一个参数,即一个列表。
在这种情况下,您需要手动确定参数的类型:
def point_inside(self, double_or_list, *args) -> "bool":
if isinstance(double_or_list, list):
return _vulcanpy.TRI_triangulation_t_point_inside(self, *double_or_list)
else:
return _vulcanpy.TRI_triangulation_t_point_inside(self, double_or_list, *args)
已更新
或者你可以先解包列表tri.point_inside(*[100,100,100])
我正在测试 python 库,它是 SWIG 包装器。
这个库中的一个函数是:
def point_inside(self, *args) -> "bool":
return _vulcanpy.TRI_triangulation_t_point_inside(self, *args)
据我所知,这个函数应该采用双精度或三个双精度的列表。
当我用三个数字调用它时,它起作用了:
>>> tri.point_inside(100,100,100)
True
当我用数字列表调用它时,它失败了:
>>> tri.point_inside([100,100,100])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Program Files\Maptek\Vulcan 10.1\bin\exe\lib\site-packages\vulcan.py", line 1551, in point_inside
return _vulcanpy.TRI_triangulation_t_point_inside(self, *args)
NotImplementedError: Wrong number or type of arguments for overloaded function 'TRI_triangulation_t_point_inside'.
Possible C/C++ prototypes are:
TRI_triangulation_t::point_inside(double_list)
TRI_triangulation_t::point_inside(double,double,double)
我是否缺少某些正确调用第二个重载的语法?
不确定这是否有用,但是当我调用 returns double 列表的不同函数时,我得到了明显的结果。
def get_elevations(self, x: 'double', y: 'double') -> "double_list":
return _vulcanpy.TRI_triangulation_t_get_elevations(self, x, y)
>>> tri.get_elevations(100,100)
[88.0, 88.0, 112.0, 112.0]
*args
表示接受一系列参数,然后在函数定义中使用时将它们包装到一个变量 args
中。并且意味着在传递参数时使用时解包所有参数。
在您的第一个示例中,args=(100, 100, 100)
,因此调用 _vulcanpy.TRI_triangulation_t_point_inside(self, *args)
等于 _vulcanpy.TRI_triangulation_t_point_inside(self, 100, 100, 100)
。
在你的第二个例子中,如果我理解你的话,你希望它只使用一个参数,即一个列表。
在这种情况下,您需要手动确定参数的类型:
def point_inside(self, double_or_list, *args) -> "bool":
if isinstance(double_or_list, list):
return _vulcanpy.TRI_triangulation_t_point_inside(self, *double_or_list)
else:
return _vulcanpy.TRI_triangulation_t_point_inside(self, double_or_list, *args)
已更新
或者你可以先解包列表tri.point_inside(*[100,100,100])