interne Befehlsausführung

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.
Benutzeravatar
__blackjack__
User
Beiträge: 13123
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Und das nächste ist ja, das ein gegebenes Heidenhain-Programm rein kommt in dem die Q-Variablen ersetzt werden sollen. Dann kommt nach dem „wie definiere ich dynamisch Variablen“ die beliebte und genau so unsinnige Anschlussfrage „wie greife ich auf Variablen über den Namen zu“. *Beides* Fragen die man mit „das macht man nicht“ beantwortet, und beides Fragen wo die richtige Antwort „man verwendet ein Wörterbuch“ ist.

Oh, und das funktioniert übrigens auch gar nicht innerhalb von Funktionen:

Code: Alles auswählen

In [321]: def frobnicate():
     ...:     exec("Q42 = 23")
     ...:     print(Q42)
     ...: 

In [323]: frobnicate()
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Input In [323], in <cell line: 1>()
----> 1 frobnicate()

Input In [322], in frobnicate()
      1 def frobnicate():
      2     exec("Q42 = 23")
----> 3     print(Q42)

NameError: name 'Q42' is not defined
@Domperle: Warum darf man nicht einfach vergewaltigend, mordend, und brandschatzend durch die Nachbarschaft ziehen? Das sind doch „eingebaute Funktionen“. Warum wird mir immer gesagt „das macht man nicht“? 🤡

Python ist sehr offen was die ”Innereien” angeht. So ziemlich jeder Mechanismus der Sprache liegt offen, kann benutzt und/oder verändert werden. Es gibt eine interaktive Shell, die startet wenn man kein Programm angibt das ausgeführt werden soll. Da kann man Code eingeben der Eingabe für Eingabe kompiliert und ausgeführt wird, in einem aktuellen Modulnamensraum. Um das umzusetzen braucht man Funktionen wie `compile()`, `exec()` und `eval()`. Wenn man eine eigene Python-Shell programmieren will, braucht man die. Es gibt ja mehrere Shells mit mehr Features, wie beispielsweise IPython. Wenn man einen Debugger oder eine IDE für Python programmiert sind das nützliche Funktionen. Wenn man so etwas wie das `timeit`-Modul aus der Standardbibliothek implementieren will, braucht man das. Wenn man den Python-Interpreter in ein Programm integriert, und dort die Möglichkeit anbieten will Python(-Schnippsel) auszuführen, braucht man das.

Um Zuweisungen der Art "<name> = <wert>" auszuwerten braucht man das nicht. Da missbraucht man ein viel mächtigeres und gefährlicheres Werkzeug um sich um ein paar Zeilen sauberen Code zu drücken, der nur das macht was man will, und nicht beliebigen Python-Code ausführt. Was ja auch bedeutet, das beliebige Ausnahmen auftreten können, und man die nicht sinnvoll behandeln kann.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
sparrow
User
Beiträge: 4198
Registriert: Freitag 17. April 2009, 10:28

Ich habe ja schon vor Tagen gesagt, man soll bei Rexx bleiben, wenn man Rexx programmieren will. 😹
Benutzeravatar
__blackjack__
User
Beiträge: 13123
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wobei es mit Regina Rexx ja auch eine Open-Source-Implementierung gibt, die aktiv zu sein scheint. Und die sogar noch aktuelle DOS-Binaries baut. Cool. 😀
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten