Schrift
[thread]2099[/thread]

Python rockz!

Leser: 3


<< |< 1 2 3 4 ... 9 >| >> 83 Einträge, 9 Seiten
pktm
 2007-06-03 17:08
#23740 #23740
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

Ich dachte mit, ich beglücke euch auch mal mit der Erkenntnis, dass Python einfach besser ist.

In meinem Kurs zu statistischen Methoden in der CL wurde dieses Semester auf Python gewechselt, weil
Quote
1. whitespace: nesting lines of code; scope
2. object-oriented: attributes, methods (e.g. line)
3. readable


und dem eigentlichen Grund (und das ist der einzig gute Grund): nltk, ein Toolkit zur Verarbeitung natürlicher Sprache.

Aber weil man sowas nicht einfach zugeben kann wurde noch ein objektiver Vergleich zwischen Perl und Python heran gezogen:
Code: (dl )
1
2
3
4
5
6
7
Python example

import sys
for line in sys.stdin.readlines():
for word in line.split():
if word.endswith(&’ing&’):
print word


Code: (dl )
1
2
3
4
5
6
7
8
9
Perl exapmle

while (<>) {
foreach my $word (split) {
if ($word =~ /ing$/) {
print "$word\n";
}
}
}


Zu Perl gibts dann och die uns allen bekannten Schwächen:
Quote
1. syntax is obscure: what are: <> $ my split ?
2. &“it is quite easy in Perl to write programs that simply look like raving gibberish, even to experienced Perl programmers&” (Hammond Perl Programming for Linguists 2003:47)
3. large programs difficult to maintain, reuse


Auf jeden Fall ist Python besser, wie ich jetzt festgestellt habe. Denn, im letzten Kurs wurde dieses tolle Stück Kode erschaffen um Buchstaben-Ngramme zu erstellen:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
def ngram(n, file):
       text = open(file).read()

       # n-1 Leerzeichen vor und nach Text einfuegen
       text = (n-1)*' ' + text + (n-1)*' '

       # Zaehler initialisieren
       C_h = {}    # Zaehler fuer Kontext/History
                   #  (z.B. bei Trigram:  C(w1 w2)     )
       C_ngr = {}  # Zaehler fuer Ngram
                   #  (z.B. bei Trigram:  C(w1 w2 w3)  )
                   #  dictionary ueber Tupel aus h und letztem w
       vocab = {}  # Vokabular (dictionary mit Zaehlern)

       # Fenster von n Zeichen ueber den Text schieben
       for Ngram in [ text[i:i+n] for i in range(len(text)-n+1)]:
               # print 'Ngram: ' + Ngram
               (h, w) = (Ngram[:-1],Ngram[-1:])

               if w not in vocab:
                       vocab[w] = 0.0
               vocab[w] += 1

               # Zaehler erhoehen (bzw. wenn noetig zuerst initialisieren)
               if h not in C_h:
                       C_h[h] = 0.0
               C_h[h] += 1
               
               if (h,w) not in C_ngr:
                       C_ngr[(h,w)] = 0.0
               C_ngr[(h,w)] += 1

       # Ergebnis: Tupel aus n und dictionaries von Zaehlern
       return (n, C_h, C_ngr, vocab)


Besonders gut hat mir dabei das ohne weiteres zu lesende Kostrukt hier gefallen:

Code: (dl )
1
2
3
# Fenster von n Zeichen ueber den Text schieben
for Ngram in [ text[i:i+n] for i in range(len(text)-n+1)]:
(h, w) = (Ngram[:-1],Ngram[-1:])


Das ist gleich viel leserlicher (für jemanden, der Python kann versteht sich)!

Ich bin ja mal echt gespannt wer das am Ende des Kurses so alles gut findet.

Ich hoffe, wir kommen noch von unseren Anfänger-Schwächen weg. So ist es z.B. unschön die verwendeten Variablen zu deklarieren (wenn man das so nennen möchte). Dazu aus einem Python-Forum (http://forum.ubuntuusers.de/topic/78874/):

Quote
Die Frage ist, wie oft man solche Fehler [tipfhlr] macht, und ob das die Zeit rechtfertigt für alle Namen, bei denen man den Fehler nicht macht eine Deklaration vornehmen zu müssen.


Außerdem kommen wir den empfohlenen 50 Zeilen Kode pro Methode schon verdächtig nahe...

Aber ich gebe nicht auf. Als jemand dem Perl gut gefällt habe ich zwar so meine Probleme in Python rein zu kommen, aber es ist durchaus machbar. Ich vermisse die regulären Ausdrücke in bischen, dafür kann ich aber Strings als Objekte ansprechen. Nur Listen haben keine length() - Methode. Dafür gibt es len(Liste).

Nun gut, es wird schon gehen - bis zum Semesterende.
Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
renee
 2007-06-03 17:43
#23741 #23741
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich finde solche Argumente äußerst schwach! In Perl ist es genauso gut möglich, lesbare und auch wartbare Programme zu schreiben. Es hängt nur an der Disziplin des einzelnen Programmierers. Klar *kann* man unlesbaren Code in Perl schreiben - aber man muss es nicht!
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
RPerl
 2007-06-03 19:13
#23742 #23742
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Sorry, aber der syntax von Python ist doch echt beschissen, meiner Meinung nach.
Der Grund warum ich perl so mag ist, dass man sauberen code zu stande bringen >kann<. Und wie ich finde viel leserlicher als Python ...
lichtkind
 2007-06-03 19:46
#23743 #23743
User since
2004-03-22
5679 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
pktm du wiederholst hier sachen die lange im umlauf sind. ich würde es vorziehen wenn du dich auf deinen standpunkt beschränkst, dann können wir alle vielleicht noch was von lernen. die argumente warum python besser sein soll sind:

1.für viele unzumutbar
2.kann perl mit moose
3.subjektiv

du hast richtig erkannt das perl nicht darauf optimiert ist von anfängern sofort vollständig erkannt zu werden sondern für die ausdrucksstärke. was du forderst wäre als wenn man goethe abverlangen würde RTLdeutsch zu benutzen damit ihn ja auch jeder versteht. Für viele inklusive mich ist das nicht hinehmbar.

Code (perl): (dl )
1
2
3
4
5
6
7
while (<>) {
    foreach my $word (split) {
        if ($word =~ /ing$/) {
            print "$word\n";
        }
    }
}

das geht in perl so:
Code (perl): (dl )
1
2
3
while (<>) { 
    for split { print "$_\n" if m/ing$/ }
}
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
betterworld
 2007-06-03 20:13
#23744 #23744
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=pktm,03.06.2007, 15:08]
Code: (dl )
1
2
3
# Fenster von n Zeichen ueber den Text schieben
for Ngram in [ text[i:i+n] for i in range(len(text)-n+1)]:
    (h, w) = (Ngram[:-1],Ngram[-1:])


Das ist gleich viel leserlicher (für jemanden, der Python kann versteht sich)![/quote]
Das ist genau der Punkt.  Perl ist auch lesbar fuer jemanden, der Perl kann.  Python ist nicht lesbar fuer jemanden, der kein Python kann.

Quote
Code: (dl )
1
2
3
4
5
6
7
8
9
Perl exapmle

while (<>) {
    foreach my $word (split) {
        if ($word =~ /ing$/) {
            print "$word\n";
        }
    }
}

Ich finde, man sollte dieses Konstrukt nicht ohne local $_ davor benutzen.\n\n

<!--EDIT|betterworld|1180887241-->
pktm
 2007-06-03 20:30
#23745 #23745
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
[quote=lichtkind,03.06.2007, 17:46]pktm du wiederholst hier sachen die lange im umlauf sind. ich würde es  vorziehen wenn du dich auf deinen standpunkt beschränkst, dann können wir alle vielleicht noch was von lernen. die argumente warum python besser sein soll sind:

1.für viele unzumutbar
2.kann perl mit moose
3.subjektiv

du hast richtig erkannt das perl nicht darauf optimiert ist von anfängern sofort vollständig erkannt zu werden sondern für die ausdrucksstärke. was du forderst wäre als wenn man goethe abverlangen würde RTLdeutsch zu benutzen damit ihn ja auch jeder versteht. Für viele inklusive mich ist das nicht hinehmbar.

Code (perl): (dl )
1
2
3
4
5
6
7
while (<>) {
    foreach my $word (split) {
        if ($word =~ /ing$/) {
            print "$word\n";
        }
    }
}

das geht in perl so:
Code (perl): (dl )
1
2
3
while (<>) { 
    for split { print "$_\n" if m/ing$/ }
}
[/quote]
Wie kommst du darauf, dass das mein Standpunkt wäre, oder ich euch allen ernstes davon überzeugen wollen würde Python zu nehmen anstatt Perl? Hier??? :D

Ich wollte uch nur mal demonstrieren, was ich so von Professoren, die einem immer erzählen, dass mein seine Argumentationen wissenschaftlich gestalten sollte zu hören bekomme.
Das war echt der Hammer! Wir du richtig erkannt hast sind die Argumente wegen denen auf Python (angeblich) umgestellt wurde rein subjektiv und davon geprägt dass der Argumentierende (scheinbar) gleichermaßen wenig Ahnung von Perl und von Python hat. Das ausschlaggebende Argument war ja das, dass das nltk in Python dem Kurs eine Menge arbeit abnehmen könnte. Ob es wirklich nützlich ist wird sich noch zeigen. Bislang waren wir damit beschäftigt die Dinge die das nltk uns bietet von Hand zu implementieren...

Dass euch diese faulen Argumente geläufig sind ist mir bekannt. Wer hat noch keine dieser lustigen Diskussionen miterlebt bzw, mitgestaltet in denen es lautet: Perl vs. PHP vs. Python vs. C vs Assembler :D

Ziel des Beitrages, der in der Kategorie "Sonstige Beiträge, auch Spaß u. Sinnloses" steht war es zu erzählen, was ich in der Uni von der staatlichen Bildungselite vor den Latz geknallt bekomme - Spaß und Sinnloses halt :)
http://www.intergastro-service.de (mein erstes CMS :) )
Ronnie
 2007-06-03 20:40
#23746 #23746
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
[quote=pktm,03.06.2007, 18:30]Ziel des Beitrages, der in der Kategorie "Sonstige Beiträge, auch Spaß u. Sinnloses" steht war es zu erzählen, was ich in der Uni von der staatlichen Bildungselite vor den Latz geknallt bekomme - Spaß und Sinnloses halt :)[/quote]
Immerhin kennen und verwenden sie Skriptsprachen. Ich kenne schlimmeres.
kristian
 2007-06-03 20:50
#23747 #23747
User since
2005-04-14
684 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo

Quote
Ziel des Beitrages, der in der Kategorie "Sonstige Beiträge, auch Spaß u. Sinnloses" steht war es zu erzählen, was ich in der Uni von der staatlichen Bildungselite vor den Latz geknallt bekomme - Spaß und Sinnloses halt


Auf den ersten Blick mag es dir so erscheinen.
Ich bin heute in der Welt der freien Unternehmer und ich muß zugeben, daß ich damals bessers PHP gelernt hätte bzw. mich besser darauf spezialisiert hätte.
Es gibt derzeit definitiv mehr PHP/MySQL-Jobs als Arbeit für Perl-Hacker.
Auch bei anderen Sprachen Phyton Ruby / Ruby on Rails denke ich oft ich bin im falschen Film.
Nimm mit was gerade "Hype" ist, lerne zumindest die Grundlagen soweit, daß du dich ausdrücken kannst. (ein Programmierer spricht alle Sprachen es geht nacher nur um den Dialekt, aber es zählen im Beruf Zeilen pro Tag und die Fähigkeit des Gesamtüberblicks)

Gruß
Kristian
pktm
 2007-06-03 21:10
#23748 #23748
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
[quote=kristian,03.06.2007, 18:50]Hallo

Quote
Ziel des Beitrages, der in der Kategorie "Sonstige Beiträge, auch Spaß u. Sinnloses" steht war es zu erzählen, was ich in der Uni von der staatlichen Bildungselite vor den Latz geknallt bekomme - Spaß und Sinnloses halt


Auf den ersten Blick mag es dir so erscheinen.
Ich bin heute in der Welt der freien Unternehmer und ich muß zugeben, daß ich damals bessers PHP gelernt hätte bzw. mich besser darauf spezialisiert hätte.
Es gibt derzeit definitiv mehr PHP/MySQL-Jobs als Arbeit für Perl-Hacker.
Auch bei anderen Sprachen Phyton Ruby / Ruby on Rails denke ich oft ich bin im falschen Film.
Nimm mit was gerade "Hype" ist, lerne zumindest die Grundlagen soweit, daß du dich ausdrücken kannst. (ein Programmierer spricht alle Sprachen es geht nacher nur um den Dialekt, aber es zählen im Beruf Zeilen pro Tag und die Fähigkeit des Gesamtüberblicks)

Gruß
Kristian[/quote]
Ja das kenne ich. Wenn der Kunde sein Programm in Java will weil Java gerade in ist dann bekommt er es alt in Java. Das ist (leider) besser als den Auftrag sausen zu lassen - wenn das denn überhaupt geht.

Nur - ich studiere an einer Universität und nicht in der freien Wirtschaft. Noch ist das ein Unterschied, welcher solche Freiheiten eröffnet wie Perl zu benutzen wenn es einem gefällt, auch wenn es in Deutschland schon seit P1 tot ist, bzw. tot gesagt wird.

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
renee
 2007-06-03 21:12
#23749 #23749
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=betterworld,03.06.2007, 18:13][quote=pktm,03.06.2007, 15:08]
Code: (dl )
1
2
3
# Fenster von n Zeichen ueber den Text schieben
for Ngram in [ text[i:i+n] for i in range(len(text)-n+1)]:
(h, w) = (Ngram[:-1],Ngram[-1:])


Das ist gleich viel leserlicher (für jemanden, der Python kann versteht sich)![/quote]
Das ist genau der Punkt. Perl ist auch lesbar fuer jemanden, der Perl kann. Python ist nicht lesbar fuer jemanden, der kein Python kann.

Quote
Code: (dl )
1
2
3
4
5
6
7
8
9
Perl exapmle

while (<>) {
foreach my $word (split) {
if ($word =~ /ing$/) {
print "$word\n";
}
}
}

Ich finde, man sollte dieses Konstrukt nicht ohne local $_ davor benutzen.[/quote]
Irgendwann wirst Du es noch schaffen, allen das local einzuimpfen *daumendrück*
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 2 3 4 ... 9 >| >> 83 Einträge, 9 Seiten



View all threads created 2007-06-03 17:08.