[Python-de] socket und umlaute

Klaus-G. Meyer km-news3 at onlinehome.de
Fre Nov 21 21:25:45 CET 2003


Hi,

> in dem Beispiel-Code unten.

gibt zu, Du programmierst sonst in Perl und erwartest von Python, es sei 
ähnlich wie Perl! ;-)

Aber ehrlich, Du solltest unbedingt noch mal etwas in der Python Doku 
schmöckern, Python ist (zum Glück) anders als Perl.

Liest doch mal das Tutorial, da findest Du viele Grund-Aussagen, zB 
Kapitel 5.7 "Comparing Sequences and Other Types", dann wird Dir zB klar, 
warum Deine Vergleiche zwischen verschiedenen Typen nicht nach Deinen 
Erwartungen funktionieren.

> print "vier plus vier sind: ",(str_vier + str_vier)

Sowas geht zB in Perl, weil Perl das + für die Addition hernimmt, aber den 
. für Stringverknüpfung. Da also über den Operator der Typ zwangsläufig 
vorgeschrieben ist, konvertiert Perl automagisch Strings in Zahlen und 
addiert dann. Das ganze läuft bei Perl unter dem Stichwort "Kontext". Mit 
dem + hast Du gesagt "nummerischer Kontext", also kann es nur eine 
Addition sein. Mit dem . sagst Du "String Kontext" und deshalb erfolgt 
dann eine Umwandlung des Int in einen String. Als Folge dieses Konzeptes 
benötigt Perl auch mehr Operatoren, zB eq, lt, gt usw. für Strings.

In Python ist der Operator + dagegen überladen und seine Funktion hängt 
von den Daten ab, bei Zahlen "Addition", bei Strings "Verkettung". Wenn Du 
zwei gemischte Daten zB ein Int und ein String an das + übergibst, gibt es 
eine Fehlermeldung. Was soll Python auch machen? Der Int schreit "Ich bin 
eine Zahl, addiere mich!" und der String "Ich bin ein String, verkette 
mich!". Sollte Python das auch automagisch machen? Aber wie - den String 
in eine Zahl wandeln und addieren, oder die Zahl in einen String wandeln 
und verketten? Da das nicht eindeutig geht, muss das der Programmierer 
entscheiden und zB den String selber in eine Zahl wandeln: int("4") (siehe 
dazu auch mal hier, Regel 2 ;-) http://www.python.org/doc/Humor.html#zen)

Und hier noch ein wichtiger Info-Link zu Deinen Beispielen:
http://starship.python.net/crew/mwh/hacks/objectthink.html#mwh

-- 
Mit freundlichen Grüßen
Klaus Meyer :-)