我是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
答案 0 :(得分:2)
query
函数确实返回results
你是对的,但修改了 results
在这一行:
results.add(node.item)
此处使用的参数有时被描述为“输出参数”。
query
不是纯函数。在没有使用其返回值的情况下调用query
的地方,正在调用query
的副作用。