调用Python中具有返回值的方法

时间:2016-09-26 05:21:19

标签: python python-2.7 python-3.x

我是python的新手并且进入了这段代码。根据我以前的编程知识,我假设这个方法应该返回一些东西(results)。但为什么像self.children[0].query(rect, results)这样的语句在递归调用方法时不会将返回值赋给任何变量?

def query(self, rect, results=None):

    if results is None:
        rect = normalize_rect(rect)
        results = set()

    if len(self.children) > 0:
        if rect[0] <= self.center[0]:
            if rect[1] <= self.center[1]:
                self.children[0].query(rect, results)
            if rect[3] > self.center[1]:
                self.children[1].query(rect, results)
        if rect[2] > self.center[0]:
            if rect[1] <= self.center[1]:
                self.children[2].query(rect, results)
            if rect[3] > self.center[1]:
                self.children[3].query(rect, results)

    for node in self.nodes:
        if (node.rect[2] > rect[0] and node.rect[0] <= rect[2] and
                node.rect[3] > rect[1] and node.rect[1] <= rect[3]):
            results.add(node.item)

    return results

1 个答案:

答案 0 :(得分:2)

query函数确实返回results你是对的,但修改了 results在这一行:

results.add(node.item)

此处使用的参数有时被描述为“输出参数”。

query不是纯函数。在没有使用其返回值的情况下调用query的地方,正在调用query的副作用。