[cmd Modul] Rückgabewert einer Funktion

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Dark Shadow
User
Beiträge: 38
Registriert: Samstag 23. April 2011, 15:49

Samstag 23. April 2011, 16:28

Hallo!
Ich bin neu hier im Forum, jedoch beherrsche ich mMn die Basics und vielleicht sogar etwas mehr von Python (ich habe mit Blender 3D angefangen, mit der GameEngine gelernt und arbeite jetzt auch mit Tkinter und ähnlichem).
Um noch vorweg etwas zu sagen:
Ich habe die Suchfunktion genutzt, fand allerdings weder hier noch auf Google etwas. Vielleicht habe ich nicht den richtigen Begriff verwendet, aber das Thema ist mMn schwierig mit wenigen Wörtern zu betiteln.

Zu meinem Problem:
Derzeit arbeite ich an einer Eingabezeile, wofür ich das Modul cmd benutze. Ich habe eine Instanz der Klasse Cmd erstellt und sie verändert/erweitert. Mein Problem besteht darin, dass ich den Rückgabewert einiger Funktionen brauche um dann damit arbeiten zu können. Verwende ich "return", crasht das Programm (was bei quit() auch gewünscht ist). Zwar könnte man den Rückgabewert einer Funktion in einer Variable speichern, wobei das wegfällt, wenn ich z. B. die gleiche Funktion zweimal hintereinander aufrufe. Meine Frage lautet also:

Gibt es eine Möglichkeit, den Rückgabewert einer Funktion (wie mit "return") zu bekommen?

Hier noch ein Beispiel:
-->float 2
2.0
-->float 2 / float 4
0.5

Ich bedanke mich schon mal im Vorraus,
Dark Shadow

P.S.: Funktionen kann man anscheinend nur ohne Klammern ausführen. Kann man das in irgendeiner Weise abändern?
BlackJack

Samstag 23. April 2011, 17:19

@Dark Shadow: Du rufst die Methoden auf dem `Cmd`-Exemplar ja nicht selber auf, also *wohin* sollte so ein ``return`` denn etwas zurück geben? Das sind in dem Sinne keine Funktionen mit Rückgabewert, sondern Kommandos die etwas tun -- daher auch der Names des Moduls und der Klasse.

Das mit den Klammern habe ich nicht verstanden? Ich kann mir ja noch vorstellen, dass man ein Kommando 'float' implementiert und die entsprechende Methode dann zum Beispiel mit ``float 4.2`` aufgerufen wird, aber die Eingabe ``float 4.2 / float 2.3`` geht damit doch gar nicht, weil das zweite ``float`` kein Kommando mehr ist. Das wird doch von `Cmd` gar nicht erkannt. Es sieht mir eher aus als wenn Du mathematische Ausdrücke verarbeiten willst. Dabei wird `Cmd` nicht viel helfen können. Das musst Du selber implementieren.

Was ist denn das eigentliche Ziel des ganzen?
Dark Shadow
User
Beiträge: 38
Registriert: Samstag 23. April 2011, 15:49

Sonntag 24. April 2011, 08:50

Das Ziel soll ein Mix aus der Python-Konsole und einer normalen Kommandozeile werden, sie sollte also unter anderem rechnen und Befehle ausführen können. Das habe ich jetzt schon ein wenig hinbekommen (einfache Formeln kann ich schon ausrechnen, Strings in Zahlen umwandeln und mit ihnen zu rechnen aber nicht), aber eben noch nicht ganz. Eigentlich schade, dass das nicht so wirklich funktionieren will.

Die Klammern meinte ich wie bei normalen Funktionen, dass nur das verwendet wird, was in den Klammern steht.

Danke auf jeden Fall für deine schnelle Antwort,
Dark Shadow
BlackJack

Sonntag 24. April 2011, 09:15

@Dark Shadow: Schau Dir mal das `code`-Modul an.
Dark Shadow
User
Beiträge: 38
Registriert: Samstag 23. April 2011, 15:49

Sonntag 24. April 2011, 11:29

Das code-Modul scheint zwar interessant, allerdings ist es nicht ganz das, was ich suche. Es ähnelt mehr der normalen Python-Konsole ("code.InteractiveConsole()").
Ich habe es jetzt mit dem cmd-Modul hinbekommen, dass ich Variablen einen Wert zuweisen kann. Deren Wert kann ich allerdings noch nicht wieder anderen Variablen zuweisen. Das bekomme ich vielleicht auch noch hin. Rechnen funktioniert jetzt auch. Jetzt baue ich noch ein paar andere vielleicht hilfreiche Funktionen ein.

Trotzdem danke für Deinen Tipp.
Dark Shadow
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sonntag 24. April 2011, 12:23

Sieht aus als würdest du IPythons ``pysh`` neu implementieren...
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten