pythonでeval,exec,execfile,compile

5971 ワード

eval(str[,globals[,locals]])関数は、文字列strを有効なPython式として評価し、計算結果を返します.
同様に、exec文は、文字列strを有効なPythonコードとして実行する.execに提供するコードの名前空間はexec文の名前空間と同じである.
最後に、execfile(filename[,globals[,locals]])関数を使用して、次の例を参照してファイルを実行できます.
>>> eval('3+4')
7
>>> exec 'a=100'
>>> a
100
>>> execfile(r'c:/test.py')
hello,world!
>>>

デフォルトでは、eval()、exec、execfile()で実行するコードは、現在の名前空間にあります.eval()、exec、およびexecfile()関数は、コードとして実行するグローバル名前空間およびローカル名前空間として、1つまたは2つのオプション辞書パラメータを受け入れることもできる.例:
1 globals = {'x': 7,
2            'y': 10,
3            'birds': ['Parrot', 'Swallow', 'Albatross']
4           }
5 locals = { }
6 
7 #                  
8 a = eval("3*x + 4*y", globals, locals)
9 exec "for b in birds: print b" in globals, locals   #        
10 execfile("foo.py", globals, locals)

1つまたは2つのネームスペースパラメータを省略すると、現在のグローバルおよびローカルネームスペースが使用されます.関数内にネスト関数またはlambda匿名関数を埋め込む場合、関数本体にexecまたはexecfile()関数を使用する場合、ネストされた役割ドメインに引っ掛かるため、SyntaxError異常が発生する.(この段落の原文:If you omit one or both namespaces,the current values of the global and local namespaces are used.Also,due to issues related to nested scopes,the use of exec or execfile()inside a function body may result in a SyntaxError exception if that function also contains nested function definitions or uses the lambda operator.)
 Python2.4           
     exec      eval(), execfile()     . exec     (  print while),  eval() execfile()      .
exec(str)         ,        。
       exec,eval(), execfile()   ,               ,     .        ,                 ,              ,               ,             。

compile(str,filename,kind)関数は1つの文字列をバイトコードにコンパイルし、strはコンパイルされる文字列であり、filenameはその文字列変数を定義ファイルであり、kindパラメータはコードがコンパイルされるタイプ--'single'は単一の文を指し、'exec'は複数の文を指し、'eval'は1つの式を指す.cmpile()関数は、eval()関数およびexec文に渡されて実行されるコードオブジェクトを返します.たとえば、次のようにします.
1 str = "for i in range(0,10): print i"
2 c = compile(str,'','exec')      #          
3 exec c                          #   
4 
5 str2 = "3*x + 4*y"
6 c2 = compile(str2, '', 'eval')  #       
7 result = eval(c2)               #