使用两个已定义的参数调用Python方法,但仅传递一个变量

首席

我正在努力理解以下代码片段:

@metric
def area(prev, nxt):
    """Area of a polygon with points in clockwise order."""
    return area_piece(prev, nxt) / 2

def centroid(points):
    a = area(points)
    return [center_x_helper(points)/a, center_y_helper(points)/a]

@metric
def center_x_helper(prev, nxt):
    return (prev[0] + nxt[0]) * area_piece(prev, nxt) / 6

@metric
def center_y_helper(prev, nxt):
    return (prev[1] + nxt[1]) * area_piece(prev, nxt) / 6

def area_piece(prev, nxt):
    return nxt[0] * prev[1] - prev[0] * nxt[1]

完整的代码位于此处

我假设这points是某种2D数组/列表,其中每个项目都包含一对X和Y坐标。但是不知何故,points它传递给area(prev, nxt)每对坐标来执行计算。

当我尝试以下其中一项时

centroid([[150, 200], [0, 300], [0, 400], [3, 1]])

centroid([150, 200, 0, 300, 0, 400, 3, 1])

我收到此错误:

TypeError: area() missing 1 required positional argument: 'nxt'

我是否在这里丢失了某些内容,或者此代码根本无法以这种方式运行?

夏天

我认为您遇到的问题不是以正确的格式发送列表。

我不知道完整的代码从哪里来shapecentroid被调用时发生的area被调用。但是在实际执行区域之前,metric将调用装饰器(原始代码中的第77行)。metric然后重新排列points调用的输入列表(第85、86行),然后area在这些重新排列的列表上调用原始函数

度量标准不作用于“点”,而是与一种叫做shape“定义”的东西一起工作,我找不到它,但必须在原始代码中的某个地方。有很多的方法,shape具有不属于名单的一部分,例如.points.parts.tolist等...

因为area您需要发送两个“点”,它们似乎只是长度为2的列表,如下所示:area([1,2], [4,5])我基于他的文档字符串文本function should take two points (each lists of length 2) and return some....

但由于装饰,你也可以调用函数areashape这是因为在做任何事情之前,它都会metric被调用并shape重新安排,这样area就只能在两个“点”上调用它。因此,您需要做的是查找内容shape,然后进行调用centroid我不愿意更深入地查找确切的shape内容或如何使代码正常工作,因此,如果其他人拉出代码并进行测试,则需要接受他的回答。

另外,您可以想到的装饰器通常的方式是,它们接受一个函数,可能先做一个事情,然后调用该函数,然后再做一个之后的事情。它们返回一个函数,以便当您启动程序时,您装饰的函数将被具有相同名称的这个新函数“替换”,但是可能还会做其他/不同的事情。为更多的装饰。

为了后代-这是在注释中,并进行了一些编辑以适合答案的形式,之后删除注释。我也喜欢积分。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么此“调用”主张看到两个参数而不是仅一个?

Mockito-验证使用两个不同参数两次调用一个方法

一个函数调用中的两个参数

如何在期望两个参数的情况下仅将一个参数传递给函数?

返回两个元组时如何仅使用一个参数

读取文件名然后使用 python 调用 convenable 函数(带有一个或两个参数)

确保用户指定Python中两个函数参数中的一个和仅一个的最佳方法

.htaccess 使用两个参数和一个变量重写 URL

在Python中从一个定义两个变量

当仅接受一个参数时,如何将两个位置参数传递给unittest.patch?

使用java8 stream()。map传递两个参数来调用服务方法

使用一个变量读取两个文件?

使用RXJS发出两个连续的http调用,并仅返回第一个调用的结果

Python类实例问题(init需要五个参数;仅传递两个参数)

Python方法采用一个位置参数,但给出了两个

将具有两个参数的函数转换为仅一个参数

python中如何将两个变量的内容变成一个可调用的变量名?

传递两个变量方法在Laravel

传递一个方法以调用Obj作为参数

如何使一个方法接受一个或两个参数?

如何模拟一个bean的某些方法调用,但在同一测试类的其他方法调用中使用已定义的bean?

为什么用一个参数而不是两个参数调用释放函数?

在python中同时定义两个变量的方法的差异

PHP无法使用Ajax将两个参数传递给另一个PHP

使用JS将两个值(lat lng)传递给GET请求的一个参数键

具有两个参数(一个具有默认值)的Ruby方法仅接受一个

在两个函数中声明变量,但仅初始化其中一个

两次调用一个方法时仅呈现一个SVG组件

excel vba-返回两个值,传递一个输入参数