Python-DSLs:Maßgeschneiderte Lösungen für spezialisierte Domänen
Wenn wir das Programm schreiben, stellen wir fest, dass die von uns gelösten Probleme zu bestimmten Bereichen gehören, die auch als Domänen bezeichnet werden, wie zum Beispiel:
- Ein Bankensystem muss Transaktionen und Zinssätze beschreiben.
- Eine Webanwendung muss die Routen, Vorlagen und Antworten definieren.
Durch die Verwendung der General Purpose Language (GPL) wie Python oder Java können wir diese Probleme lösen, aber der Code wird zu detailliert und eintönig. Daher verwenden wir die DSL (Domain Specific Language).
DSL – Domänenspezifische Sprache
Die domänenspezifische Sprache ist eine Programmier- oder Spezifikationssprache, die einer bestimmten Domäne gewidmet ist. Sie unterscheidet sich von der Allzwecksprache (GPL wie Python, C++ oder Java). Es gibt zwei Arten:
- Externes DSL – Es ist eine völlig neue Sprache mit eigener Syntax und eigenem Compiler
- Internes DSL (Embedded DSL) – Ein DSL, das in die Hostsprache integriert ist und deren Syntax und Konstrukte verwendet.
Externes DSL
Für die Arbeit mit den Datenbanken verwenden wir SQL. Anstatt Schleifen zum manuellen Scannen von Daten zu schreiben, schreiben wir einfach:
SELECT name FROM users WHERE age > 10;
Für die Gestaltung der Webseiten verwenden wir HTML. Anstatt die Textzeichenfolgen und -positionen manuell zu verwalten, deklarieren wir einfach:
<h1>Welcome To Tutorialspoint</h1>
Internes DSL
In Python baut die domänenspezifische Sprache auf der Python-Syntax auf. Frameworks wie Flask oder Pandas sind Beispiele für DSL-ähnliche Bibliotheken, die helfen, die Probleme klar auszudrücken.
@app.route('/home')
def home():
return "Hello...!"
Warum DSLs in Python
Python ist die beste Wahl für DSL, weil:
- Seine Syntax ist einfach und ausdrucksstark.
- Es ermöglicht die Verwendung der Funktionen und Klassen als Bausteine.
Beispielsweise sind die Test-Frameworks wie Pytest oder Web-Frameworks wie Flask DSL-ähnlich. Anstatt die Low-Level-Logik zu schreiben, lassen sie die ausdrucksstarken Befehle schreiben.
Lassen Sie uns in das Beispiel eintauchen, um mehr über die domänenspezifische Sprache zu erfahren.
Beispiel 1
Schauen wir uns das folgende Beispiel an, in dem wir die Sprache der Mathematik in benannte Funktionen abstrahieren.
def add(x, y): return x + y def multiply(x, y): return x * y print(add(multiply(1, 3), multiply(2, 4)))
Es folgt die Ausgabe des obigen Programms:
11
Beispiel 2
Betrachten Sie das folgende Beispiel, in dem wir DSL in den Konfigurationsdateien verwenden werden.
class demo:
def __init__(self):
self.settings = {}
def set(self, key, value):
self.settings[key] = value
return self
def get(self, key):
return self.settings.get(key)
result = demo()
result.set("host", "Welcome").set("port", 1231)
print(result.get("host"))
Die Ausgabe des obigen Programms ist -
Welcome
Beispiel 3
Im folgenden Beispiel beobachten wir die DSL zum Abfragen von Daten mithilfe der SQL-Syntax innerhalb von Python.
class demo:
def __init__(x, dataset):
x.dataset = dataset
def where(x, condition):
x.dataset = [item for item in x.dataset if condition(item)]
return x
def select(x, selector):
return [selector(item) for item in x.dataset]
users = [
{"name": "Ram", "age": 10},
{"name": "Ravi", "age": 24},
{"name": "Rahul", "age": 19},
]
result = demo(users).where(lambda u: u["age"] > 18).select(lambda u: u["name"])
print(result)
Es folgt die Ausgabe des obigen Programms:
['Ravi', 'Rahul']
Python
- Python-Ausnahmebehandlung Mit der try-, except- und finally-Anweisung
- Beispiele für Python-Funktionen:Aufruf, Einrückung, Argumente und Rückgabewerte
- Erkunden anonymer Klassen und Objekte in Python
- Python List Comprehension, Anhängen, Sortieren, Länge [BEISPIELE]
- Python-Prüfung, ob Datei vorhanden ist | So prüfen Sie, ob ein Verzeichnis in Python existiert
- Python-DSLs:Maßgeschneiderte Lösungen für spezialisierte Domänen
- Python-Glossar:Grundlegende Begriffe und Definitionen
- Python - Erweiterungsprogrammierung mit C
- Treten Sie Real Python bei:Erstellen Sie Ihr Konto und greifen Sie auf Premium-Python-Tutorials zu
- Python-Debugger:Verbessern Sie mühelos Ihre Debug-Fähigkeiten