Tek sad pogledah kôd i primetih koliko u stvari nije pythonic.
Pre svega, ta varijabla
unos_br je skroz nepotrebna, jer kanal.entries je
list tip podatka, koji podrzava
iteratore, tako da je dovoljno upotrebiti konstrukciju:
for entry in kanal.entries:
cime ces u petlji imati raspolozivu varijably
entry, a takodje nema potrebe za
hvatanjem izuzetaka (sa try/catch) jer koristeci iterator nije moguce dobiti izuzetak u tom kontekstu. S druge strane, izuzetak koji bi trebalo da se hvata i resi je
UnicodeEncodeError, jer prosto stampanje naslova ce da prijavi taj izuzetak.
Evo modifikovane
hranilica() funkcije:
Code:
def hranilica(rss):
kanal = feedparser.parse(rss)
print "-" * 20
print "%s [%d]" % (kanal.feed.title.encode("utf-8"), len(kanal.entries))
print "-" * 20
for entry in kanal.entries:
print entry.title.encode("utf-8")
Ukoliko zelis samo 10 unosa iz
kanal.entries, modifikuj for petlju da iz liste izvuce potreban deo (tzv.
list slicing), i to ovako:
for entry in kanal.entries[:10].
Ne mogu da se setim da li u RSS feed-ovima na ES-u postoji feed koji vraca listu foruma, jer ako postoji onda se for petlja u kojoj pozivas funkciju hranilica moze dodatno prepraviti.
Mada, ukoliko zelis da ti kôd bude bas napredan python, onda tu for petlju mozes zameniti prostijom konstrukcijom, koristeci
map() funkciju i tzv. list comprehensions:
Code:
rss = "http://www.elitesecurity.org/forum/%d/backend.xml"
map(hranilica, [rss % x for x in range(150)])
Eto, sad je kôd pythonic, i izgleda ovako:
Code:
def hranilica(rss):
kanal = feedparser.parse(rss)
print "-" * 20
print "%s [%d]" % (kanal.feed.title.encode("utf-8"), len(kanal.entries))
print "-" * 20
for entry in kanal.entries[:10]:
print entry.title.encode("utf-8")
if __name__ == '__main__':
rss = "http://www.elitesecurity.org/forum/%d/backend.xml"
map(hranilica, [rss % x for x in range(150)])
Toliko od mene :)
Alex: My favorite site is
http://localhost/
R.J. Oppenheimer: "I am become death, destroyer of worlds" (1945 AD)
tweet.13x ||
linkedin.13x