Eigentlich nicht viel uneleganter. Nur, dass dank der dämlichen Einrückregel aus {$a * $b} gleich 3 volle Zeilen werden.
1. Die ist nicht dämlich
2. Kann man auch anders schreiben z.B.:
Code: Alles auswählen
def fakt(n):
return reduce(lambda x, y: x*y,range(1,n+1))
Oder die funktion eben ganz in einer Zeile:
Code: Alles auswählen
fakt = lambda n: reduce(lambda x, y: x*y,range(1,n+1))
//edit: bei def muss man nicht mal eine newline machen, also geht auch
Code: Alles auswählen
def fakt(n): return reduce(lambda x, y: x*y,range(1,n+1))
Kein Funktionsoverhead kein nichts. Und dabei vermutlich um längen schneller.
Da würde ich mich nicht so weit aus dem Fenster lehen. Bei perl bist du an den perl Interpreter gebunden weil die Sprache nicht formal definiert ist. Bei python musst du nicht zwangsläufig die vergleichsweise langsame Referenzimplementierung benutzen sondern kannst z.B. pypy verwenden.
Perl ist öfters auf Systemen installiert(Linux,solaris,BSD).. Python ist logischer zu programmieren und ist mächtiger (wenn man sich die Softwareprojekte so anschaut)
Python ist zumindest im Linux Bereich ähnlich verbreitet alleine schon weil viele Distributionen tools mitliefern, die das benutzen.
Wie schon angedeutet ist Python halt eine sauber formal definierte Sprache und perl das exakte Gegenteil davon. Mag zwar im ersten Moment toll erscheinen, dass praktisch alles irgendwie funktioniert aber man tut sich sicherlich keinen Gefallen, gerade wenn es mal komplexer als ein paar Zeilen wird.
Unix is user-friendly; it's just picky about who its friends are.