BlackJack hat geschrieben:@Alfons Mittelmeyer: Python ist eine objektorientierte, imperative Programmiersprache und es gibt ein paar Grundsätze wie „pythonischer” Code auszusehen hat. Und Deiner ist sehr weit davon entfernt als „pythonisch” durchzugehen.
Als was der bei Dir gilt, ist mit egal. Mir geht es nur darum, dass wenn ein Widget gelöscht wird, dann auch nichts mehr über bleibt. Alles muss weg sein! Ist das so schwer zu verstehen?
BlackJack hat geschrieben:Das was Du als Schwachstellen siehst sind keine. Du siehst Probleme wo keine sind, und schreibst Code ”gegen” die Sprache, statt die Sprache so zu verwenden wie sie von den Erfindern gedacht ist.
Ich verwende die Sprache genau so, wie sie vorgesehen ist. Und vorgesehen ist, dass sie zur Laufzeit kompileren kann. Wenn Du nicht einverstanden bist, dass sie das kann, dann streite darüber mit Guido van Rossum. Aber werfe mir bitte nicht vor, dass ich verwende, was die Sprache bietet.
BlackJack hat geschrieben:Wenn Du auf die Klimmzüge bei ``lambda`` und Kontrollstrukturen nicht versessen bist und so etwas nicht gerne tust, warum *tust* Du es dann?
Bei lambda hatte ich geschrieben, dass es gehen würde, auch mehrzeiligen Code und gar mit Kontrollstrukturen zu schreiben, Und das hatte ich auch gezeigt. Aber das sieht mir so haarsträubend aus, dass ich so etwas nicht tue.
Dein Vorwurf, "Warum tust Du es dann?" ist also völlig an den Haaren herbeigezogen.
BlackJack hat geschrieben:Warum versuchst Du Dein Paradigma mit aller Gewalt in die Sprache zu pressen? Sowohl bei ``lambda`` als auch bei zur Laufzeit kompiliertem Code siehst Du doch selber das Du Klimmzüge machen musst, warum siehst Du das nicht als Zeichen das Du da etwas machst was so nicht vorgesehen ist?
Wie bereits vorher geschrieben, bei lambda mache ich gar nichts. Lambda würde sehr viele Probleme lösen, wenn es nicht nur eine Expression, sondern eine ganze Funktion wäre. So ist lambda leider nicht besonders hilfreich.
Und wenn man keinen haarstäubenden lambda code schreiben möchte mit eigenen Kontrollstrukturen und wenn man will, dass auch mehrzeiliger Code weg ist, wenn die Referenz darauf weg ist, bleibt eben nur die Kompilierung.
Und die Kompilierung zur Laufzeit ist vorgesehen und bietet genau was ich will, nämlich mehrzeiigen Code ohne haarsträbende Kontrollstrukturen. Leider bietet sie keine lokalen Variablen, sondern alle Variablen wären dann global. Lokale Variablen hätte ich gerne, bekomme ich leider nicht. Und globale Variablen sollte man meiden. Sollte eigentlich jeder Programmierer wissen. Und ohne lokale und globale Variablen wird die Programmierunhg schwierig. Bleibt nur mehr so etwas wie ein Stack.
Muss ich jetzt Deiner Meinung nach globale Variablen benützen, weil die Sprache keine lokalen vorsieht? Und ist die Benützung eines Stacks als Ersatz für lokale Variablen und zur Vermeidung globaler Variablen gegen die Sprache? Und etwas, was man daher nicht tun darf?
Also ich weiß nicht was Du willst? Ich benütze ganz genau, was die Sprache vorsieht, behelfe mich mit einem Stack, den die Sprache auch vorsieht, als Ersatz für lokale Variablen, welche die Sprache leider nicht vorsieht und zur Vermeidung globaler Variablen.
Und ich will nicht in Python programmieren? Genau in Python will ich programmieren. Weiß Du was ich tun könnte? die Objekte mit der Methode .execute() sind nicht auf kompilierten Python Code festgelegt. Sie könnten auch eine Sequenz von solchen Objekten sein mit Kontrollstrukturen. Darüber könnte ich auch ein FORTH System einbinden, das in Python geschrieben ist. Das wäre auch nicht gegen die Sprache. Aber da ich in Python programmieren will, tue ich das nicht. Python kann man auch mit C erweitern. Darüber könnte ich gar eine weitere Programmiersprache wie Squirrel einbinden. Und das tue ich auch nicht, da ich der Ansicht bin, dass es Python sein soll und keine andere Sprache.
Aber auch das sieht Python vor und wäre daher also auch nicht gegen die Sprache!
Und ich denke, ein grafischer GUI Creator, der in Python geschrieben ist, ist wohl besser für den Anwender als ein Konsolen GUI Creator in FORTH , den ich zuvor hatte und der auch in Python geschrieben ist. In Python kann man eine GUI auch über die Konsole erstellen. Aber wenn man etwas tun will, muß man eine Funktion im Python Stil eingeben mit mehr Tipparbeit. In Python ist es 'ls()', um sich das Directory und die Auswahl zeigen zu lassen, in FORTH war es nur 'l' und 'goIn()' war in FORTH auch nur '\' und um eine widget anzuwählen, braucht es ein 'goto("name")', in Forth war es aber nur 'name'
Das wäre mit FORTH zwar GUI gewesen, aber nicht Python. Ich habe starke Zweifel, ob das einer gewollt hätte.
Aber mit unserer Diiskussion sind wir schon lange am Thread Thema vorbei. The Thema war: command mit zwei Argumenten. Und das Ergebnis war, dass beliebig viele Argumente möglich sind und gar noch beliebig viele Funktionsaudrufe. Sogar noch Kontrollstrukturen sind möglich. Das war dann das gewesen:
Code: Alles auswählen
def pseudofunction(par=None):pass
def if_execute(condition, function):
if condition: function()
def ifelse_execute(condition, function1, function2):
if condition: function1()
else: function2()
a=(lambda a=5, b=6,c=7: pseudofunction((
print(a),
print(b),
print("noch etwas"),
print(c),
ifelse_execute(a<b,lambda: print("a < b"),lambda: print("a >= b"))
)))
a()
print("\nEinmal gemacht\n")
a()
print("\nZweimal gemacht")
Und damit wär dieses Thema wohl zuende.