Python DSL:индивидуальные решения для специализированных доменов
Когда мы пишем программу, мы обнаруживаем, что проблемы, которые мы решаем, относятся к конкретным областям, также называемым доменами, например:
- Банковская система должна описывать транзакции и процентные ставки.
- Веб-приложение должно определять маршруты, шаблоны и ответы.
Используя язык общего назначения (GPL), такой как Python или Java, мы можем решить эти проблемы, но код становится слишком подробным и повторяющимся. Следовательно, мы будем использовать DSL (язык, специфичный для домена).
DSL – язык, специфичный для домена
Язык, специфичный для предметной области, — это язык программирования или спецификации, предназначенный для конкретной предметной области. Он отличается от языка общего назначения (GPL, такого как Python, C++ или Java). Они бывают двух типов:
- Внешний DSL — это совершенно новый язык со своим синтаксисом и компилятором.
- Внутренний DSL (встроенный DSL) — DSL, встроенный в основной язык с использованием его синтаксиса и конструкций.
Внешняя DSL
Для работы с базами данных мы используем SQL, вместо того, чтобы писать циклы для сканирования данных вручную, мы просто пишем:
SELECT name FROM users WHERE age > 10;
Для разработки веб-страниц мы используем HTML. Вместо управления строками текста и позициями вручную мы просто объявляем:
<h1>Welcome To Tutorialspoint</h1>
Внутренний DSL
В Python предметно-ориентированный язык построен на основе синтаксиса Python. Такие фреймворки, как flask или Pandas, являются примерами DSL-подобных библиотек, которые помогают четко выразить проблемы.
@app.route('/home')
def home():
return "Hello...!"
Почему DSL в Python
Python — лучший выбор для DSL, потому что:
- Его синтаксис прост и выразителен.
- Это позволяет использовать функции и классы в качестве строительных блоков.
Например, такие платформы тестирования, как pytest, или веб-фреймворки, такие как Flask, похожи на DSL. Вместо написания низкоуровневой логики они позволяют писать выразительные команды.
Давайте углубимся в пример, чтобы узнать больше о предметно-ориентированном языке.
Пример 1
Давайте посмотрим на следующий пример, где мы собираемся абстрагировать математический язык на именованные функции.
def add(x, y): return x + y def multiply(x, y): return x * y print(add(multiply(1, 3), multiply(2, 4)))
Ниже приводится вывод вышеуказанной программы —
11
Пример 2
Рассмотрим следующий пример, где мы собираемся использовать DSL в файлах конфигурации.
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"))
Вывод вышеуказанной программы:
Welcome
Пример 3
В следующем примере мы рассмотрим DSL для запроса данных с использованием синтаксиса SQL внутри 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)
Ниже приводится вывод вышеуказанной программы —
['Ravi', 'Rahul']
Python
- Python — кортежи
- Функции Python range():Float, List, For loop Примеры
- Длина строки Python | Пример метода len()
- Вход в Facebook с использованием Python:пример входа в FB
- Управление файлами Python:легко переименовывайте и удаляйте файлы
- Python TUPLE — упаковка, распаковка, сравнение, нарезка, удаление, ключ
- Изучение анонимных классов и объектов в Python
- ООП Python:класс, объект, наследование и конструктор с примером
- Python — типы переменных
- Привет, мир:создайте свою первую программу на Python