Как вернуть вместо печати - PullRequest
       61

Как вернуть вместо печати

2 голосов
/ 27 февраля 2020

Я получаю желаемый результат от использования print (), но хочу получить тот же результат при использовании возврата. как я могу изменить это на возврат? Когда я делаю, он возвращает только первый ключ, значение, в котором я хочу получить четыре, которые находятся в BST.

 def inOrder(self, aNode):
       if aNode:
        self.inOrder (aNode.leftChild)
        print (aNode.key + ' ' + aNode.payload +'\n')
        self.inOrder (aNode.rightChild)

результат, который я ищу, состоит в том, чтобы четыре ключа следовали за этим значением.

1 Ответ

5 голосов
/ 27 февраля 2020

Чтобы сделать именно то, что вы хотите, вам нужно использовать ключевое слово yield (подробности для оператора yield from здесь )

 def inOrder(self, aNode):
       if aNode:
        yield from self.inOrder(aNode.leftChild)
        yield (aNode.key, aNode.payload)
        yield from self.inOrder(aNode.rightChild)

Что будет вернув генератор, вы можете «развернуть» его, используя list(inOrder(...))

У вас также может быть выделенный аргумент, который вы будете обновлять при go через:

 def inOrder(self, aNode, res=[]):
       if aNode:
        self.inOrder(aNode.leftChild, res)
        res.append((aNode.key, aNode.payload))
        self.inOrder(aNode.rightChild, res)

, который будет предоставить аналогичные результаты.

...