Kann man in Python eigene Anweisungen erstellen

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
Naitsab_33
User
Beiträge: 1
Registriert: Samstag 14. Oktober 2017, 22:51

Ich mache in letzter Zeit viel mit Wurzeln also habe ich mir die Frage gestellt ob man eigene Anweisungen erstellen kann.
Normal:
x = sqrt(4)

Beispiel:
2 root 4
oder
4 root 2
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Kurze Antwort: nein.

Längere: das was du beschreibst ist eine DSL - Domain specific language. Dafür gibt es durchaus Tools, aber da muss man schon ziemlich viel investieren.
Benutzeravatar
bwbg
User
Beiträge: 407
Registriert: Mittwoch 23. Januar 2008, 13:35

Es gibt einen binären Infix-Operator für Potenzen (**). Hierüber lassen sich auch Wurzeln darstellen.

Darüber hinaus sind Operatoren auch (nur) Funktionen. Warum sollte man eine neue Schreibweise für Funktionen einfügen wollen; von einer DSL mal abgesehen?
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Naitsab_33: nur wenige Programmiersprachen erlauben die Definition von Operatoren, Python nicht. Wurzelziehen ist nur eine Spezialform von Potenzieren und dafür gibt es schon einen Operator.

Code: Alles auswählen

x = 4 ** 0.5
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Naitsab_33 hat geschrieben:Ich mache in letzter Zeit viel mit Wurzeln also habe ich mir die Frage gestellt ob man eigene Anweisungen erstellen kann.
Normal:
x = sqrt(4)

Beispiel:
2 root 4
oder
4 root 2
Wenn dir das Wort "sqrt" zu seltsam vorkommt (es steht für "square root" - Quadratwurzel) dann könntest du auch definieren, dass folgendes funktioniert: x = root(4)

Code: Alles auswählen

def root(a):
  return sqrt(a)
Insofern kannst du sehr wohl eigene "Anweisungen" erstellen. Hier macht es nur wenig Sinn, weil im Grunde nur eine vorhandene Funktion umbenannt wird, sonst kommt nichts weiter dazu.

Hingegen die Schreibweise eines Funktionsaufrufes (Funktionsname, Klammer auf, Argumente, Klammer zu) zu ändern ist deutlich aufwändiger, würde ich hier nicht empfehlen. Wie kamst du auf die Idee? Übrigens willkommen an Bord :)
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Kebap: was heißt hier "deutlich aufwändiger"? Es geht schlich mit Python nicht.
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

@Sirius3: Ich hatte den Eindruck, dass Naitsab_33 das Wort "sqrt" seltsam fand und lieber "root" schreiben wollte.

Da alle Antworten letztendlich "Geht nicht" antworteten, wir hier aber jemanden mit seinem ersten Post im Forum begrüßen dürfen, wollte ich eine Möglichkeit zeigen, wie es doch leicht geht.

Seine vorgeschlagene Schreibweisen "2 root 4 oder 4 root 2" sind ja extra mit "Beispiel" überschrieben und für mich also als Vorschlag eines Anfängers nicht direkt in Stein gemeisselt, wie man auch daran merkt, dass ihm selbst noch gar nicht klar zu sein scheint, in welcher Reihenfolge 2 und 4 dann stehen sollen.

Der Thread heißt zudem "eigene Anweisungen erstellen" und das geht mit "def" ganz wunderbar, was vielleicht noch nicht jeder Anfänger bemerkt hat.

Letztendlich ist die Schreibweise "4 hoch 0,5" als Alternative für "Quadratwurzel aus 4" ebenfalls schlau, wenn man die mathematischen Grundlagen schon versteht.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Es geht, wenn man den Quelltext der Python-Implementierung anpasst. Das ist aber eher unüblich. Die Sprache selbst unterstützt es jedenfalls nicht.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Man muss die Python Implementierung gar nicht modifizieren. Es würde reichen in den Import Mechanismus einzugreifen wofür es APIs gibt. Man kann dann effektiv die Definition von Python Modul und PYTHONPATH beliebig erweitern.

Das einzige Problem stellt der Compiler da den man bräuchte. Sofern man nur Python leicht modifizieren möchte könnte man da aber ziemlich gut 2to3 forken und für diesen Zweck anpassen.
Antworten