(データベースからの)入力文字列を関数としてコンパイルして実行する必要があります。これは私が現在使用している方法である:ASTを使用してテキストを関数としてコンパイルする方法は?
def foo():
print "Yo foo! I am a function!"
そして、私は、データベースから読み込んだ文字列は、私は、この関数を呼び出す必要が言う:
は、私はすでにこの機能が定義されていると言う
string_from_db = "foo()"
次に、データベースから読み込んだ関数を返す関数(その名前を制御できる)を作成します。
my_func_string = "def doTheFunc():\n\t return " + string_from_db
今私は、文字列をコンパイルし、私は処理のために後で使用関数名に設定します。
exec my_func_string
processor = doTheFunc
私は叫ぶどのprocessor()
を実行して、後でそれを呼び出すことができます。Yo foo! I am a function!
私の質問:上記を「潜在的な交換」
###############################################################
# The following method for getting a function out of the text #
# in the database could potentially be replaced by using #
# Python's ast module to obtain an abstract syntax tree and #
# put it inside of a function node #
###############################################################
私はこれについての詳細を知りたい
:コードのこの作品は、(長い失われた開発者によって左)のコメントがあり私はASTを見てきましたが、上記のコードを使って私がすでにやっていることをどのように手助けすることができるのか非常に混乱しています。
- ASTを使用して同じことを達成するにはどうすればよいですか?または、ASTはこのプロセスでどこで助けますか?
- ASTを使用した実装が優れているのはなぜですか?
あなたは暗い魔法の領域にいます。 –
文字列が安全であると分かっているなら、 'ast'を' exec() 'に使う理由はありません。 PythonインタプリタはすでにPythonのソースコードを関数オブジェクトに解析して実装しています。なぜそれを複製するのですか? – millimoose
@millimoose私は文字列が安全であることを知っているので、私は 'exec'実装に行きました。しかし、この質問は「ast」のより良い使用について私に啓発している。ありがとう! – dinkelk