pythonでeval,exec,execfile,compile
5971 ワード
eval(str[,globals[,locals]])関数は、文字列strを有効なPython式として評価し、計算結果を返します.
同様に、exec文は、文字列strを有効なPythonコードとして実行する.execに提供するコードの名前空間はexec文の名前空間と同じである.
最後に、execfile(filename[,globals[,locals]])関数を使用して、次の例を参照してファイルを実行できます.
デフォルトでは、eval()、exec、execfile()で実行するコードは、現在の名前空間にあります.eval()、exec、およびexecfile()関数は、コードとして実行するグローバル名前空間およびローカル名前空間として、1つまたは2つのオプション辞書パラメータを受け入れることもできる.例:
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.)
compile(str,filename,kind)関数は1つの文字列をバイトコードにコンパイルし、strはコンパイルされる文字列であり、filenameはその文字列変数を定義ファイルであり、kindパラメータはコードがコンパイルされるタイプ--'single'は単一の文を指し、'exec'は複数の文を指し、'eval'は1つの式を指す.cmpile()関数は、eval()関数およびexec文に渡されて実行されるコードオブジェクトを返します.たとえば、次のようにします.
同様に、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) #