この関数の用途は何ですか?最も簡単な例の1つは、インタープリターによって読み取られるコードです。インタープリターはそれを文字列として読み取り、コンパイルによってコンパイルされ、pythonで認識可能なコードに変換されます。 。したがって、pythonを実行できます。
これは、コンパイルによってstrの文字列をpythonコードにコンパイルする例です。詳細は次のとおりです。
http://www.cnblogs.com/wupeiqi/p/4592637.htmlからの参照
この記事の内容は、その後のトルネードテンプレートの分析に備えたタイトルからもわかります。また、このナレッジポイントを巧みに利用しているため、別の記事で紹介します。それほどナンセンスではありません。コードに移動してください。
#! usr/bin/env python
# coding:utf-8
namespace ={'name':'wupeiqi','data':[18,73,84]}
code ='''def hellocute():return "name %s ,age %d" %(name,data[0],) '''
func =compile(code,'<string>',"exec")
exec func in namespace
result = namespace['hellocute']()
print result
このコードの実行結果は次のとおりです。namewupeiqi、18歳
上記のコードの分析:
6行目では、コードは文字列であり、文字列の内容は関数本体です。
8行目、コード文字列を関数helloにコンパイルします
10行目では、関数helloが名前名辞書に追加され(key is hello)、pythonのすべての組み込み関数がnamespaceフィールドに追加されます(key is builtins)。このようにして、名前付けの内容は1つずつ似ています。グローバル変数、すなわち
name = wupeiqi data = [18,73,84] def hellocute(): return "name %s ,age %d" %(name,data[0],)
12行目、Hello関数を実行し、戻り値を結果にコピーします
14行目、結果を入力
このコードは非常に巧妙かつ盲目的に使用され、文字列を関数に変換し、関数のグローバル変数も提供します。この関数の場合、これはpython Webフレームワークのテンプレート言語部分の最も重要な部分です。テンプレート処理プロセスでは、最初にhtmlファイルが読み取られ、次にhtmlファイルが分割され、次に分割されたファイルが文字列表現を形成するためです。関数、次に上記のメソッドを使用して文字列表現を実行する関数。
Recommended Posts