(データベースからの)入力文字列を関数としてコンパイルして実行する必要があります。これは私が現在使用している方法です:
私はすでにこの関数を定義しているとしましょう:
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を使用した実装の方が優れていますか?その理由は何ですか?