2016-09-26 2 views
1

Я новичок в python и вошел в этот кусок кода. Из моих предыдущих знаний о программировании я предполагаю, что этот метод должен вернуть что-то (results). Но почему некоторые операторы типа self.children[0].query(rect, results) не присваивают возвращаемое значение любой переменной при рекурсивном вызове метода?Вызов метода, который имеет возвращаемое значение в Python

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 

ответ

2

Вы правы, что функция query делает возвращение results, но он также изменяетresults на этой линии:

results.add(node.item) 

параметр, используемый в это иногда описывается как «выход параметр».

query не является чистой функцией. В тех местах, где query вызывается без использования его возвращаемого значения, query вызывается для его побочных эффектов.

Смежные вопросы