工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Python

Python DSL:特殊なドメインに合わせたソリューション

プログラムを作成すると、解決する問題が次のような特定の領域 (ドメインとも呼ばれます) に属していることがわかります。

Python や Java などの汎用言語 (GPL) を使用すると、これらの問題を解決できますが、コードが詳細になりすぎ、繰り返しが多くなります。したがって、DSL (ドメイン固有言語) を使用します。

DSL - ドメイン固有言語

ドメイン固有言語は、特定のドメイン専用のプログラミングまたは仕様言語です。汎用言語 (Python、C++、Java などの GPL) とは異なります。これらには 2 つのタイプがあります:

外部 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...!"

Python で DSL を使用する理由

Python は次の理由から DSL に最適な選択です。

たとえば、pytest などのテスト フレームワークや Flask などの Web フレームワークは 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

次の例では、Python 内の SQL 構文を使用してデータをクエリするための DSL を観察します。

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

  1. Python 変数、定数、およびリテラル
  2. Python while ループ
  3. Python - GUI プログラミング (Tkinter)
  4. PyTest チュートリアル:概要、インストール方法、フレームワーク、アサーション
  5. Python 開発者専用の Real Python Slack コミュニティに参加しましょう
  6. Python でスレッド間通信をマスターする:同期とデータ共有
  7. Python の例外処理:try、catch、finally、raise [例]
  8. Python デコレータ
  9. Python Get 現在時刻
  10. Python 文字列:置換、結合、分割、反転、大文字と小文字
  11. Python イテレータ