变量没有在Python中接收方法的返回值

时间:2017-03-01 14:41:16

标签: python python-3.x methods return

def return_node(self, head, position):
    if position == 0:
        # return the node correctly
        return head
    else:
        self.return_node(head.next_node, position - 1)

def insert_at_position(self, head, data, position):
    if position == 0:
        self.insert_first(head, data)
    elif position == self.length:
        self.insert_last(head, data)
    else:
        previous_node = self.return_node(head, position - 1)
        # previous_node's value is None instead of the method's return value
        next_node = self.return_node(head, position)
        # same here
        new_node = Node(data, next_node)
        previous_node.next_node = new_node
        self.length += 1

我试图在我的链接列表中实现一个在特定位置插入节点的方法。问题是:变量' previous_node'和' next_node'没有正确得到价值。 而不是节点值,他们得到无。谢谢你们!

2 个答案:

答案 0 :(得分:6)

else:
  self.return_node(head.next_node, position - 1)

不会返回任何内容,因为没有返回关键字。

return self.return_node(head.next_node, position - 1)

会做你想要的。

答案 1 :(得分:2)

您的变量设置为None的原因是因为如果没有提供要返回的值,那么这是函数返回的默认值:

def foo(): 
    pass 


>>> type(foo())
<class 'NoneType'>

由于else内的return_node()子句未返回值,因此Python返回None。如果要递归调用return_node并返回后续调用返回的值,则需要使用return

def return_node(self, head, position):
    if position == 0:
        # return the node correctly
        return head
    else:
        return self.return_node(head.next_node, position - 1) # use return