2015-11-21 3 views
3

У меня есть стек со связанным списком. Когда я звоню list.push(), он отлично работает, но он ничего не делает, когда я делаю то же самое в funtion init(). В чем может быть проблема?Вызов функции связанного списка

class Node: 
    def __init__(self, data): 
     self.data = data 
     self.nextNode = None 

    def __str__(self): 
     return str(self.data) 

class linkedList: 
    def __init__(self): 
     self.head = None 
     self.end = None 

    def isEmpty(self): 
     return self.head == None 

    def push(self, item): 
     new_node = Node(item) 
     if not self.head: 
      self.head = self.end = new_node 
     else: 
      new_node.nextNode = self.head 
      self.head = new_node 

#doesnt work 
def init(): 
    list = linkedList() 
    list.push("a") 

init() 
print(list.isEmpty()) #True 

#works 
list = linkedList() 
list.push("a") 
print(list.isEmpty()) #False 
+1

в первом примере, ваш «список» объект существует только в пределах функция. Пусть функция вернет «список». Код, который вы отправили, вызовет ошибку atttribute, потому что встроенный список не имеет атрибута isEmpty – user2682863

ответ

1

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

def make_list(): 
    my_list = linkedList() 
    my_list.push("a") 
    return my_list 

my_list = make_list() 
print(my_list.isEmpty()) 

Не используйте имя list для ваших объектов, как это тени встроенной list.

-1

Вы должны ВОЗВРАТА объекта вы делаете внутри функции, потому что объект «умирает», когда функция заканчивается, так что нет никакого объекта там для вас смотреть. Вот почему вы получаете пустое правду.

вот как вы сделать его работу:

def make(): 
    aList = linkedList() 
    aList.push("a") 
    return aList 

, то вы бы магазин все, что отдача от этого объекта:

some_list = make() # storing the linkedlist that make() returns into 
        # variable called 'some_list' 
print(some_list.isEmpty()) # True 
+0

Как это отличается от ответа Майка? –