Anzeige:
Ergebnis 1 bis 6 von 6

Thema: Python for Schleife mit return Anweisung?!?

  1. #1
    Registrierter Benutzer
    Registriert seit
    30.09.2002
    Beiträge
    24

    Python for Schleife mit return Anweisung?!?

    Hi,
    wer kann mir helfen mein Problem zu lösen? Eine for Schleife soll mehrere return Anweisungen haben.
    Beispiel:
    Code:
    import feedparser
    from HTMLParser import HTMLParser
    import formatter, htmllib
    ##############################################################################
    class feedReader(object):
        '''Class: feedReader'''
    ##############################################################################
        def list(self, rssFeed):
            '''List all messages (Title and Content)'''
            dumbWriter = formatter.DumbWriter()
            format = formatter.AbstractFormatter(dumbWriter)
            htmlparser = htmllib.HTMLParser(format)
            feed = feedparser.parse("%s" % (rssFeed))
            for i in xrange(len(feed['entries'])):
                title = feed.entries[i].title
                data = feed.entries[i].description
                content = htmlparser.feed(data)
                htmlparser.close()
                author = feed.entries[i].author
                return (title, content, author)
    ##############################################################################
    print feedReader().list("http://somewhere.on.the.net/blog/rss20.xml")
    Bei Ausführung kriege ich immer nur den ersten Eintrag zurück.

    Bei dem Code geht es darum pro Feed-Eintrag eine Konvertierung von HTML zu Plain Text zu machen und diese Anschliessend in eine DB zu füllen (dieser Code Teil besteht noch nicht).

    Danke im Voraus für eure Hilfe,
    tinti

  2. #2
    Registrierter Benutzer
    Registriert seit
    25.12.2003
    Beiträge
    40
    Häng in der Schleife an eine Liste an und gib nach der Schleife die Liste zurück.
    Code:
    def list(self, rssFeed):
        crap = []
        ...
        for ...:
            ...
            crap.append((title, content, author))
        return crap

  3. #3
    Registrierter Benutzer
    Registriert seit
    30.09.2002
    Beiträge
    24
    Super so funktioniert das einwandfrei , Vielen Dank.

    tinti

  4. #4
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Eine andere Möglichkeit wäre übrigens ein Generator: statt "return" verwendest du "yield". Beim Aufruf der "Funktion" bekommst du dann ein Generatorobjekt zurück, wo du mittels .next() das nächste Element bekommst. Alternativ kannst du auch einfach drüber iterieren. Einfaches Beispiel:
    Code:
    def simple():
      # Absichtlich hier keine For-Schleife...
      x = 0
      while x < 100:
        yield x
        x += 1
    
    #Möglichkeit 1 (nicht so gut)
    a = simple()
    print a.next() # 0
    print a.next() #1 
    # etc. Es wird eine StopIteration-Exception geworfen, wenn du am Ende bist.
    
    # Möglichkeit 2
    for x in simple():
      print x
    Übrigens solltest du eines deiner C-like-Kontrukte ändern: statt
    Code:
    for i in xrange(len(feed['entries'])):
                title = feed.entries[i].title
                data = feed.entries[i].description
                content = htmlparser.feed(data)
                htmlparser.close()
                author = feed.entries[i].author
                return (title, content, author)
    schreibst du besser
    Code:
    for entry in feed['entries']:
                title = entry.title
                data = entry.description
                content = htmlparser.feed(data)
                htmlparser.close()
                author = entry.author
                return (title, content, author)

  5. #5
    Registrierter Benutzer
    Registriert seit
    30.09.2002
    Beiträge
    24
    @Joghurt, wird die Schleife schneller durch das C-like Konstrukt oder ist dies nur der Schöhnheit wegen?

  6. #6
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Wahrscheinlich wird sie auch schneller, wenn auch nur unmerklich.

    Ist einfach "unpythonic" und umständlich, das so wie du zu machen.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •