[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [OT] Python oder Perl



On 02.Aug 2005 - 10:09:38, Frank Küster wrote:
> Thorsten Haude <debian@thorstenhau.de> wrote:
> >>import os
> >>list = os.listdir('/tmp')
> >>for filename in list:
> >>    print filename,
> >>    if os.path.isdir(filename):
> >>        print "is a directory"
> >>    else:
> >>        print "is a regular file"
> >
> > Wenn ich mal raten darf, was Python macht, sieht das in Ruby so aus:
> >
> > dir = Dir.new('/tmp')
> > dir.each { |filename|
> >     print filename
> >     if filename.stat.directory?
> >         print "is a directory"
> >     else
> >         print "is a regular file"
> >     end
> > }
> >
> Naja, ich kenne keine der beiden Sprachen, finde aber trotzdem gleich

Ich kenne Ruby nicht aber,...

> - Python verwendet die in tausend Sprachen geläufige Syntax "for <name>
>   in <liste> <separator> <body>", während Ruby offenbar sowas macht:
>   "<Kommando_das_liste_produziert> { | <name> | <body> }, das finde ich
>   schwer lesbar (vor allem wenn ich mir vorstelle wie ich das dann von
>   while, until, etc. unterscheiden soll).

Ich finds schonmal gut das man sowohl in Python als auch in Ruby
(offensichtlich) einfach so ueber listen iterieren kann, ohne dabei
selbst mitzaehlen zu muessen ala for (int i=0; i<laenge; ++i)... Das mit
den |<var>| ist ja im Prinzip nur ne Eigenart der Sprache, ebenso
gibts bei Python ein paar Dinge die unleserlich sind, z.B.
lambda-Funktionen (f = lambda x: x+4, erzeugt eine Funktion (ohne Namen)
und bindet sie an f, jetzt kriegt man mit f(0) 4, f(1) 5 usw. "raus")
oder auch list comprehension: [3*x for x in list if x>3] liefert mit
list=[1,2,3,4,5,6] als Ergebnis eine Liste [12,15,18]...

> - Python verwendet zum Erstellen der Liste ein Kommando mit intuitiv
>   verständlichem Namen (os.listdir('<directory>'), Ruby dagegen offenbar
>   ein Suffix .each hinter dem Namen der Variable, die auf das
>   Verzeichnis zeigt.  Das finde ich schon in diesem Fall ungewohnt, und
>   wenn ich mir vorstelle, dass das Verzeichnis nicht in "dir" steckt,
>   sondern in "newplace" oder "wget_target" oder so, wird es noch
>   schwerer.  Zumal dann, wenn .each auch auf anderen Dingen als
>   Verzeichnissen agieren kann (z.B. URLs oder Datenbank-dingsens).

Ich denke da verstehst du was falsch. Ruby und Python sind sich da IMHO
ziemlich aehnlich. In Python kann ich mit for <x> in <y> ueber jedes
Objekt iterieren das sich wie eine Liste verhaelt. Das koennte auch eine
Klasse sein, die einfach nur die passenden funktionen implementiert
(frag mich nicht welche das sind, weiss ich ausm Kopf nicht). Ruby hat
statt dieser for-Geschichte einfach eine Funktion "each" fuer
entsprechende Objekte die die Iteration ueber jedes Element der Liste
durchfuehrt. Ist also im Prinzip auch nichts anderes als ein Unterschied
im Dialekt.

> - und schließlich finde ich das Fragezeichen hinter .stat.directory
>   (oder steht es hinter if <test>?) irgendwie albern

Find ich persoenlich eher nicht, aber auch da: Python braucht nen ":",
Ruby ebend ein "?".

Andreas

-- 
Be free and open and breezy!  Enjoy!  Things won't get any better so
get used to it.



Reply to: