Seite 1 von 1

Einzeiler zum fürchten

Verfasst: Sa Dez 29, 2012 9:03 am
von fat-lobyte
Also manchmal mach ich mir selber Angst...

Code: Alles auswählen

# open files
infile_fds = [open(infile, 'r') for infile in infilenames]

# Stick all SeqIO iterators together to form one long chain
record_iter = itertools.chain(*[SeqIO.parse(infile, "fasta") for infile in infile_fds])

try:
    results = run_finders(record_iter)
finally:
    for f in infile_fds:
        f.close()
wat? :geek:

Erste Zeile: verwandle eine Liste von Dateinamen in eine Liste von offenenen Dateideskriptoren

Zweite Zeile: Generiere aus jeder Datei in der Liste der Dateideskriptoren einen Iterator mit den geparsten Einträgen dieser Datei, speichere diesen in eine Liste ab, entpacke die liste und erzeuge einen "zusammengehängten" Iterator mit den Einträgen aller Dateien :roll:

3-4 Zeile: Füttere den Iterator mit den Einträgen in meine Funktion.
# Man beachte: bis jetzt wurde erstmal *gar nix* gelesen. Meine Funktion kann sich jetzt einen Eintrag nach dem anderen in den Speicher ziehen und abarbeiten.

5-7 Zeile: Mach alle Filedeskriptoren zu


Sowas geht auch nur in Python ^^

Aber ich mag das. In der Kürze liegt die Würze.

ps.: Na gut, vielleicht würde man das mit C++11/Lambdas/IOStream auch irgendwie hinkriegen.

Re: Einzeiler zum fürchten

Verfasst: Sa Dez 29, 2012 11:48 am
von cloidnerux
Also manchmal mach ich mir selber Angst...
Versuch da mal nächste Woche einen Fehler zu finden :D
Sieht aber gut aus.
ps.: Na gut, vielleicht würde man das mit C++11/Lambdas/IOStream auch irgendwie hinkriegen.
Mit C# ginge das höhst wrsl auch, durch Linq ist das hantieren von Datenströmen relativ einfach.
Aber ich möchte sowas nicht umbedingt implementieren wollen^^.

Re: Einzeiler zum fürchten

Verfasst: Sa Dez 29, 2012 11:42 pm
von Xin
fat-lobyte hat geschrieben:Also manchmal mach ich mir selber Angst...
Die Frage ist doch eher, ob das ein Idiom ist, also etwas, was man üblicherweise in der Sprache kennt.
Es sieht kurz aus, was grundsätzlich schonmal gut ist. Wenn diese programmiersprachliche "Floskel" allgemein bekannt ist, sehe ich bei sowas kein Problem.

Re: Einzeiler zum fürchten

Verfasst: Mo Dez 31, 2012 12:54 pm
von fat-lobyte
Das erzeugen von Listen aus Iteratoren

Code: Alles auswählen

liste = [x for x in iterator]
Ist auf jeden Fall ein Idiom. Das ist auch eines der besten Features der Sprache, wie ich finde.

Python gefällt mir übrigens immer mehr.