daterem.py vs. daterem.pl ...
Ich muss bzw. darf mich mit der Programmiersprache Python auseinandersetzen. Was liegt da näher, ein selbstgeschriebenes Perl-Skript nach Python zu migrieren? Nichts. Also habe ich es getan.
Die Ergebnisse lassen sich auf GitHub sehen.
Kritik ist ausdrücklich erwünscht, ich kann davon nur lernen.
Diesen Artikel wollte ich nicht Python vs. Perl nennen, weil beide Programmiersprachen ihre Berechtigung haben und es gibt ja nicht wirklich einen Streit zwischen beiden, nur unterschiedliche Philosophien. Einer von vielen Gründen ist, dass Perl von einem Linguisten - Larry Wall - entwickelt wurde und Python von einem Mathematiker - Guido van Rossum.
So, hier kommen die Dinge, die mir beim Umschreiben aufgefallen sind. Achtung! Ich bin kein Programmierer, sondern eher ein Skripter ...
Die folgenden Punkte kann meiner Ansicht nach Python besser:
Aber auch Perl hat seine Stärken:
Es gibt gute Gründe, die zu den Entscheidungen in den Programmiersprachen geführt haben. Ich möchte auch nicht in "besser" oder "schlechter" einteilen, das ist doof. Alles, was man mit der einen Programmiersprache erledigen kann, kann man auch mit der anderen tun.
Die Ergebnisse lassen sich auf GitHub sehen.
Kritik ist ausdrücklich erwünscht, ich kann davon nur lernen.
Diesen Artikel wollte ich nicht Python vs. Perl nennen, weil beide Programmiersprachen ihre Berechtigung haben und es gibt ja nicht wirklich einen Streit zwischen beiden, nur unterschiedliche Philosophien. Einer von vielen Gründen ist, dass Perl von einem Linguisten - Larry Wall - entwickelt wurde und Python von einem Mathematiker - Guido van Rossum.
So, hier kommen die Dinge, die mir beim Umschreiben aufgefallen sind. Achtung! Ich bin kein Programmierer, sondern eher ein Skripter ...
Die folgenden Punkte kann meiner Ansicht nach Python besser:
- Datumshandling mit mitgelieferten Bibliotheken: das Modul time ist doch deutlich komfortabler als das Perl-Pendant Time::local (zum Wert für Monat muss 1 und zum Wert von Jahr muss 1900 addiert werden).
- Struktur: Da Bei Python die Einrückungen eine Rolle spielen, kann auf geschweifte Klammern für Codeblöcke verzichtet werden, das gefällt mir richtig gut.
- Listen: Der Umgang mit Listen gefällt mir auch besser als bei Perl, aber ich gebe zu, dass das Geschmackssache sein könnte.
Aber auch Perl hat seine Stärken:
- Reguläre Ausdrücke, nun, was soll ich schreiben, reguläre Ausrücke gehen direkt und wesentlich unkomplizierter als bei Python, wo sie per Modul nachgerüstet werden müssen. Es hat einen Grund, dass es einen Namen gibt "PRE - Perl Regular Expressions".
- Variablenhandling: Ich habe mich daran gewöhnt, dass ich eine Variable sowohl als String wie auch als Zahl verwenden kann, ohne umwandeln zu müssen. Gut, Python ist schwach typisiert, aber wenn der Typ feststeht, muss man konvertieren.
- Assoziative Arrays gefallen mir deutlich besser als Dictionaries, das ist wieder einmal Geschmackssache.
- Nachgestelles "if"
print $a if ($a == $b)
ist wirklich hübscher als ein Mehrzeiler.
Es gibt gute Gründe, die zu den Entscheidungen in den Programmiersprachen geführt haben. Ich möchte auch nicht in "besser" oder "schlechter" einteilen, das ist doof. Alles, was man mit der einen Programmiersprache erledigen kann, kann man auch mit der anderen tun.
Kommentare
Ansicht der Kommentare: Linear | Verschachtelt
Kai Wolf am :
ein paar Anmerkungen:
Verwende für die Dokumentation statt diesen ### doch lieber
""" my foo doc """
Das ist PEP8 Standard und taucht damit auch z.B. in der Hilfe von vielen Python IDEs auf, wenn die Funktion aufgerufen wird.
Du kannst noch ein
main()
in deinem Skript ergänzen, dann lässt sich das besser als Modul in andere Pythonskripte importieren bzw. einfach von der Kommandozeile starten, da beim Aufruf deines Skripts automatisch main() aufgerufen wird.
Dirk Deimeke am :
Momentan sind ja nur sehr wenige Kommentare enthalten, wenn es mehr wird, ändere ich das gerne.
Den Test habe ich direkt aufgenommen und Dich im Commit erwähnt.
Danke!
freiheit am :
Danke für diesen wirklich wahren Satz, welcher nicht nur hier, sondern viel öfters Anwendung finden sollte! Und zwar universell. Wie oft denken wir in "Richtig und Falsch", dabei ist es oft nur ein "Anders"
Dirk Deimeke am :
Die Einsicht hat vielleicht auch mit dem Alter zu tun
Matthias Gutjahr am :
Dirk Deimeke am :
Cool, danke! Ich muss mal herausfinden, ob das nur für print funktioniert oder auch für andere Kommandos.
dpausp am :
if a == b: print(a)
"a if b else 0" ist einfach ein Ausdruck, der überall geht und hat nicht speziell mit print zu tun. Das ist hier das Argument, welches der print-Funktion übergeben wird.
Sowas ist z.B. recht praktisch, wenn man nicht weiß, ob in der Liste ein Element ist oder nicht:
elem = liste[0] if liste else None
Dirk Deimeke am :
if a == b: print(a)
entspricht
if ($a == $b) {print $a};
Die geschweiften Klammern können beim "nachgestellten if" entfallen.
Das unten stehende Konstrukt kann Perl natürlich auch:
my $elem = @liste ? $liste[0] : undef;
oder
my $c = $a == 10 ? $b : $a;
Saddy am :
a = 1 if True else 2
Dirk Deimeke am :
Sebstian am :
https://stackoverflow.com/questions/22140204/why-md5240610708-is-equal-to-md5qnkcdzo
http://www.darkreading.com/vulnerabilities---threats/php-hash-comparison-weakness-a-threat-to-websites-researcher-says-/d/d-id/1320353
Wenn man weiss, was man tut, ist das kein Problem. Andernfalls kann es immer noch als Fehler passieren.
http://www.sitepoint.com/typing-versus-dynamic-typing/
Dirk Deimeke am :
Wenn Du von einer Sprache kommst, wirst Du immer Punkte finden, die ungewohnt sind.
Sebastian am :
Dirk Deimeke am :