【问题标题】:Return statement not executing返回语句未执行
【发布时间】:2013-04-05 23:40:07
【问题描述】:

所以我写了一个代码,它应该在树中获取给定节点的父节点。这是伪代码。从根开始,

def parent(self, child): 
    if right child exists:
        if the right child == child:
            return self
        else: self.right.parent(child)
    if left child exists:
        if the left child == child:
            print('f')
            return self
        else: self.left._get_parent(node)

我一遍又一遍地遇到这个问题。 对于if the left child == child: 语句,如果该函数发现the left child == childthe right child == child,则该函数会进入if 语句。

但是,return 语句不执行此操作。我知道这一点,因为当我写if the left child == child: 并在其后写print('f') 时,它确实打印了f,但是它没有返回self。有谁知道为什么,任何人都可以就如何解决这个问题给出解决方案?

另外,有谁知道如何同时返回两个语句而不是元组或列表? 比如我想返回1和2,

def x(n):
    return 1, 2

这将返回(1, 2).. 有没有办法不将其作为元组返回?只是为了正常返回。我问这个是因为在递归方面,我想在 1 AS WELL AS 2 上调用相同的函数,而不是在元组 (1, 2) 上调用。

【问题讨论】:

  • 1, 2 一个元组。括号是语法糖,真的。返回一个元组是返回多个值的 方式。只需 index 返回值或使用元组解包。

标签: python


【解决方案1】:

您的代码丢弃else: 分支中递归调用的返回值。您需要更多return 语句:

if right child exists:
    if the right child == child:
        return self
    else: 
        return self.right.parent(child)
if left child exists:
    if the left child == child:
        print('f')
        return self
    else:
        return self.left._get_parent(node)

在 Python 中,表达式 1, 2 创建一个元组,这是从函数返回多个值的规范方式。这就是多值返回的工作原理,通过返回一个元组。

只需解包返回值:

def foo():
   return 1, 2

value1, value2 = foo()

或使用索引:

values = foo()
values[0], values[1]

【讨论】:

  • 您编写的函数不起作用。它只返回右孩子的父母,而不是左孩子。
  • 我们为什么要大喊大叫?我所做的只是将return 语句添加到您的代码中。如果您的代码没有返回左孩子,则需要验证您的算法。
猜你喜欢
  • 1970-01-01
  • 2013-08-16
  • 2015-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多