def
Pythonで自分のwith
ような新しいステートメントを定義する方法はありますか?for
もちろん、私は既存のステートメントをオーバーライドするつもりはなく、自分のステートメントの一部を作成するだけです。
もしそうなら、どうすればいいですか?このテーマに関する優れたドキュメントを教えていただけますか?
def
Pythonで自分のwith
ような新しいステートメントを定義する方法はありますか?for
もちろん、私は既存のステートメントをオーバーライドするつもりはなく、自分のステートメントの一部を作成するだけです。
もしそうなら、どうすればいいですか?このテーマに関する優れたドキュメントを教えていただけますか?
いいえ、Pythonプログラム内に新しい構文を追加することはできません。言語を変更する唯一の方法は、文法ファイルとサポートするCコードを編集および再コンパイルして、新しい変更されたインタープリター、コンパイラー、およびランタイムを取得することです。
コンパイラ/インタプリタなどを書き直さずに言語キーワードを(再)定義することはできません。おそらくあなたができることは、DSL(ドメイン固有言語)のようなものと、キーワードステートメントを適切なpythonステートメントに変換するものを書くことです。これはより簡単なルートかもしれません。
Python自体の構文を変更することはできませんが(Alexが述べたように再コンパイルせずに)、メタプログラミング手法を使用できます。以下は、PythonでDSLを作成するためのプレゼンテーションへのリンクです。
http://blog.brianbeck.com/post/53538107/python-dsl-i
Pythonと結婚していない場合、Rubyはより広範なメタプログラミング機能を備えているため、DSLを定義するための優れた言語です。
http://www.themomorohoax.com/2009/02/25/how-to-write-a-clean-ruby-dsl-rails
Ren'Pyは、独自のパーサーとコンパイラーを実装することでカスタムステートメントを可能にするPythonの拡張機能の例です。
これを可能にするプログラミング言語(たとえばTcl)がありますが、Pythonはそれらの言語の1つではありません。