2010-10-22 24 views
9

Jedes Mal, wenn der Eingang s aus dem Formular kommt; Die list wird erneut initialisiert. Wie ändere ich den Code, um jedes neue s an die Liste anzuhängen?Wie initialisiert man leere Liste?

Vielen Dank.

class Test(webapp.RequestHandler): 
    def get(self): 

     s = self.request.get('sentence') 
     list = []         
     list.append(s)      
     htmlcode1 = HTML.table(list)   
+0

Um das Verhalten zu ändern, müssen Sie die Reihenfolge Ihrer Anweisungen ändern. Warum versuchst du nicht ein paar verschiedene Anordnungen der Aussagen, um zu sehen, wie sich das Verhalten ändert? –

+7

Vermeiden Sie Namen, die Schatteneinbauten ("Liste") enthalten. –

+0

@ S.Lott: Raten und überprüfen ist keine sehr effektive Art, etwas über eine Sprache zu lernen. Es hat seinen Platz, aber ich widerspreche in diesem Umstand respektvoll. – JoshD

Antwort

5

Ich bin mir nicht sicher, was der Kontext des Codes ist, aber dies sollte funktionieren:

class Test(webapp.RequestHandler): 
    def get(self): 
     s = self.request.get('sentence') 
     try: 
      self.myList.append(s) 
     except NameError: 
      self.myList= [s] 
     htmlcode1 = HTML.table(self.myList) 

Dies macht list eine Instanzvariable, so dass es um haftet. Das Problem ist, dass list möglicherweise nicht existiert, wenn wir das erste Mal versuchen, es zu benutzen, also müssen wir es in diesem Fall initialisieren.

Eigentlich bei this post suchen, könnte dies saubereren Code sein:

class Test(webapp.RequestHandler): 
    def get(self): 
     s = self.request.get('sentence') 
     if not hasattr(self, 'myList'): 
      self.myList = [] 
     self.myList.append(s) 
     htmlcode1 = HTML.table(self.myList) 

[Edit:] Die obige Arbeit aus irgendeinem Grund nicht, so versuchen, diese:

class Test(webapp.RequestHandler): 
    myList = [] 
    def get(self): 
     s = self.request.get('sentence') 
     self.myList.append(s) 
     htmlcode1 = HTML.table(self.myList) 
+0

Danke. Ich habe versucht, dies http://codepad.org/bdCaLiUs aber immer noch schreibt die Liste statt anhängen – Zeynel

+0

@Zeynel folgen Sie nicht den Anweisungen –

+0

@Zeynel Der Code, den Sie verknüpfen, sieht nicht wie mein Fix. Versuchen Sie, kopieren und fügen Sie meinen Fix in Ihrem Code. – dln385

5

Sie könnte die Liste zu einer Mitgliedsvariablen des Objekts machen und sie dann nur dann aktualisieren, wenn get() aufgerufen wird:

class Test(webapp.RequestHandler): 
    def __init__(self, *p, **kw): # or whatever parameters this takes 
     webapp.RequestHandler.__init__(self, *p, **kw) 
     self.list = [] 

    def get(self): 
     s = self.request.get('sentence') 
     self.list.append(s)      
     htmlcode1 = HTML.table(self.list)   
+0

+1 Ich denke, dass das Erstellen von 'self.list' in' ___init__ 'die Dinge expliziter macht. –

+0

+1 Das ist, was ich tun wollte, aber ich gab auf, als ich das ursprüngliche' __init __() 'für' nicht finden konnte webapp.RequestHandler'. Ich habe den '* p, ** kw' Trick vergessen. – dln385

+0

Warten Sie, was passiert, wenn '__init__' einen Anruf zu' get' macht? (Ich bin mir nicht sicher, was "webapp.RequestHandler" tatsächlich tut). Ich denke du solltest 'self.list = []' vor dem Aufruf zu '__init__'. – dln385

Verwandte Themen