Python Tutorials

Objektorientierte Skriptsprache: (python.org)
nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Python Tutorials

Beitrag von nufan » Do Aug 07, 2008 11:48 am

Was mir sehr gut gefällt ist die zwangsweise EInrückung, die die Klammerung ersetzt. Es zwingt den Programmierer zu einer sauberen Formatierung und man spart sich die Klammern für andere Dinge.
Mit den Klammern hab ich auch so meine Probleme, da sie bei der deutschen Tastatur (fürs Programmieren) schlecht platziert sind.

Also es lohnt sich, da mal reinzuschaun?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Python Tutorials

Beitrag von Xin » Sa Aug 09, 2008 1:36 pm

dani93 hat geschrieben:
Was mir sehr gut gefällt ist die zwangsweise EInrückung, die die Klammerung ersetzt. Es zwingt den Programmierer zu einer sauberen Formatierung und man spart sich die Klammern für andere Dinge.
Mit den Klammern hab ich auch so meine Probleme, da sie bei der deutschen Tastatur (fürs Programmieren) schlecht platziert sind.
Du kannst die Klammern ja wieder auf ü und + legen, bzw. ö und ä legen und dafür +, ü, ö und ä auf Alt-Gr 7, 8, 9 und 0. :->
dani93 hat geschrieben:Also es lohnt sich, da mal reinzuschaun?
Wie gesagt, es ist zu früh, ein Resümee zu ziehen, für mal eben ein paar Skripte zu machen oder schnell eine kleine Aufgabe zu erledigen, erscheint mir Python allerdings wirklich sehr gut geeignet.
Es bleibt aber eine Skriptsprache mit allen dazugehörigen Nachteilen.
Syntaktisch geht Python einen etwas anderen Weg, man muss sich einige Dinge anders angewöhnen. Angucken lohnt sich auf jeden Fall mal.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Python Tutorials

Beitrag von nufan » Sa Aug 09, 2008 2:22 pm

Ich hab das Python-Package auf Ubuntu schon installiert.
Mein erstes C-Programm brachte ich darauf auch zum laufen (nachdem ich das buid-Zeug heruntergeladen habe).
Du kannst die Klammern ja wieder auf ü und + legen, bzw. ö und ä legen und dafür +, ü, ö und ä auf Alt-Gr 7, 8, 9 und 0. :->
Bei uns in der Schule habe ich mal versucht mit einer auf Englisch gestellten Tastaur zu programmieren. Die Beschriftung war aber Deutsch. Es hat 30 Minuten gedauert, bis ich

Code: Alles auswählen

#include <stdio.h>
hatte. Als ich aber den ";" brauchte, hab ichs aufgegeben ^^

razibu
Beiträge: 1
Registriert: Sa Apr 11, 2009 9:34 pm

Re: Python Tutorials

Beitrag von razibu » Sa Apr 11, 2009 9:36 pm

Was noch sehr empfehlenswert ist, wäre "A Byte of Python".

http://abop-german.berlios.de/

Ist in Deutsch und sehr verständlich geschrieben.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Python Tutorials

Beitrag von Xin » Sa Apr 11, 2009 10:57 pm

razibu hat geschrieben:Was noch sehr empfehlenswert ist, wäre "A Byte of Python".
Vielen Dank für den Link. Python wollte ich in der nächsten Zeit nochmal wieder näher bringen. :-)
Ansonsten willkommen im Forum.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

dP.
Beiträge: 23
Registriert: Di Apr 14, 2009 2:52 pm

Re: Python Tutorials

Beitrag von dP. » Di Apr 21, 2009 10:28 pm

Was in C++ als Operatorenüberladung gelöst ist, ist in Python eine Membermethode, deren Name nicht mit dem Operator übereinstimmt. Die Operatorüberladung selbst ist letztendlich eine Memberfunktion, die allerdings als Bezeichner den entsprechenden Operator erhält. Das gefällt mir an Python nicht.
Was genau stört dich daran? Mir ist das noch nie negativ aufgestoßen. Ob die Methode, die ich überlade __add__ oder operator+ heißt, ist doch erstmal egal. Gut, ich kann keine Operatoren als freie Funktionen schreiben. Aber da weiß ich auch nicht, wie das in Python gelöst werden sollte. Wie kriegt der Interpreter denn raus, welcher Operator jetzt wirklich aufgerufen wird?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Python Tutorials

Beitrag von Xin » Di Apr 21, 2009 10:56 pm

dP. hat geschrieben:
Was in C++ als Operatorenüberladung gelöst ist, ist in Python eine Membermethode, deren Name nicht mit dem Operator übereinstimmt. Die Operatorüberladung selbst ist letztendlich eine Memberfunktion, die allerdings als Bezeichner den entsprechenden Operator erhält. Das gefällt mir an Python nicht.
Was genau stört dich daran? Mir ist das noch nie negativ aufgestoßen. Ob die Methode, die ich überlade __add__ oder operator+ heißt, ist doch erstmal egal. Gut, ich kann keine Operatoren als freie Funktionen schreiben. Aber da weiß ich auch nicht, wie das in Python gelöst werden sollte. Wie kriegt der Interpreter denn raus, welcher Operator jetzt wirklich aufgerufen wird?
Genauso, wie ein Compiler!?

Es geht mir um die Frage der Definition eines überladenen Operators. Und hier finde ich die Syntax eher bescheiden, bei C sage ich dass ich einen Operator überladen möchte und welchen. Bei Python muss ich mir eine Zuordnung zwischen Operator (+ == add) und diese ätzenden Unterstriche, die ich so auch ablehene.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

dP.
Beiträge: 23
Registriert: Di Apr 14, 2009 2:52 pm

Re: Python Tutorials

Beitrag von dP. » Mi Apr 22, 2009 3:39 pm

Genauso, wie ein Compiler!?

Code: Alles auswählen

def __add__(a, b):
    return a + b

def __add__(a, b):
    return a - b

a = MyNumberType(3)
b = AnotherNumberType(4)

c = a + b
Was steht in c? und woher weiß der Interpreter, welches __add__ er nehmen soll, wenn man keine Funktionen an Hand von Typen überladen kann? Daher finde ich es hier ganz richtig, dass man nur die Möglichkeit einer Überladung in der Klasse hat. Was dumm ist:

Code: Alles auswählen

a = MyNumber(5)
a + 3 # funktioniert
3 + a # TypeError
Es geht mir um die Frage der Definition eines überladenen Operators. Und hier finde ich die Syntax eher bescheiden, bei C sage ich dass ich einen Operator überladen möchte und welchen. Bei Python muss ich mir eine Zuordnung zwischen Operator (+ == add) und diese ätzenden Unterstriche, die ich so auch ablehene.
Gut, über Geschmack lässt sich streiten. Bei Python bedeutet ein führender Bodenstrich halt 'Achtung, Objektinterna' und zwei führende Bodenstriche das selbe, nur dass die Namen noch verändert werden. Damit es bei Vererbung keine Probleme gibt. Schon sinnvoll die Regel, aber gerade bei häufigen Methoden wie __init__, die man auch mal von ausserhalb einer Klasse aufruft, schon unschön.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Python Tutorials

Beitrag von Xin » Mi Apr 22, 2009 8:14 pm

dP. hat geschrieben:
Genauso, wie ein Compiler!?

Code: Alles auswählen

def __add__(a, b):
    return a + b

def __add__(a, b):
    return a - b

a = MyNumberType(3)
b = AnotherNumberType(4)

c = a + b
Was steht in c?
In C nix, da kann man keine Operatoren überladen.
In C++

Code: Alles auswählen

ResultingType operator + (MyNumberType & lhs, AnotherNumberType & rhs ) { return ResultingType( lhs.Value + rhs.Value ); }
ResultingType operator + (AnotherNumberType & lhs, MyNumberType & rhs ) { return rhs + lhs; } // Kommutativgesetz
dP. hat geschrieben:und woher weiß der Interpreter, welches __add__ er nehmen soll, wenn man keine Funktionen an Hand von Typen überladen kann? Daher finde ich es hier ganz richtig, dass man nur die Möglichkeit einer Überladung in der Klasse hat.
Ich habe auch nie behauptet, dass ich die schwache Typisierung in Python in irgendeiner Form gutheißen würde.
Und ich sehe auch nicht ein, einen Mangel einer Sprache durch einen anderen Mangel zu entschuldigen.
dP. hat geschrieben:Was dumm ist:

Code: Alles auswählen

a = MyNumber(5)
a + 3 # funktioniert
3 + a # TypeError
In C++ kein Problem.
dP. hat geschrieben:
Es geht mir um die Frage der Definition eines überladenen Operators. Und hier finde ich die Syntax eher bescheiden, bei C sage ich dass ich einen Operator überladen möchte und welchen. Bei Python muss ich mir eine Zuordnung zwischen Operator (+ == add) und diese ätzenden Unterstriche, die ich so auch ablehene.
Gut, über Geschmack lässt sich streiten. Bei Python bedeutet ein führender Bodenstrich halt 'Achtung, Objektinterna' und zwei führende Bodenstriche das selbe, nur dass die Namen noch verändert werden. Damit es bei Vererbung keine Probleme gibt. Schon sinnvoll die Regel, aber gerade bei häufigen Methoden wie __init__, die man auch mal von ausserhalb einer Klasse aufruft, schon unschön.
Sicher kann man über Geschmack streiten. Allerdings sollte der Geschmack da zurücktreten, wo Konsistenz gefragt wird. Ich sehe den Zusammenhang zwischen a+b und "operator +" als deutlicher gegeben, als bei __add__. Über __+__ hätte man noch reden können, aber hier werden zusätzliche Schlüsselwörter verbraten, die eigentlich nicht notwendig sind.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

dP.
Beiträge: 23
Registriert: Di Apr 14, 2009 2:52 pm

Re: Python Tutorials

Beitrag von dP. » Mi Apr 22, 2009 8:33 pm

In C nix, da kann man keine Operatoren überladen.
Da haben wir aneinander vorbeigeredet. 'Welchen Wert ist an den Namen c gebunden?', hätte ich hier der Klarheit halber schreiben sollen.
Ich habe auch nie behauptet, dass ich die schwache Typisierung in Python in irgendeiner Form gutheißen würde.
Das halte ich für eine der Stärken von Python. Allerdings hätte ich Python jetzt als stark, aber eben nicht statisch typisiert bezeichnet. Zumindest hat jedes Objekt zur jeder Zeit einen genau festgelegten Typ.

Antworten