5

私はPython 3コードを書いていますが、何らかの理由ですべてをメモリ内で実行し、ディスクにファイルを保存したくありません。ここで回答を読むことで、これまでの問題のほとんどすべてを解決できましたが、次の行で立ち往生しています。

>>> code = compile(source, filename, 'exec')
>>> exec code in module.__dict__

「in」をループに接続し、何かがセットにあるかどうかをテストしているため、2行目が何をするのかよくわかりませんが、この場合はそうではありません。

では、2 行目は何をするのでしょうか。そして、py3ではキーワードではなくexec関数であるため、Python 3に相当するものは何ですか?

4

3 に答える 3

5
exec code in module.__dict__ 

「コード」と呼ばれるファイルまたは文字列内のコマンドを実行し、「コード」で参照されるグローバル変数とローカル変数を取得し、「コード」でmodule.__dict__作成されたローカル変数とグローバル変数を辞書に格納することを意味しますmodule.__dict__

http://docs.python.org/reference/simple_stmts.html#execを参照してください

例えば:

In [51]: mydict={}

In [52]: exec "val1=100" in mydict

In [53]: mydict['val1']
Out[53]: 100

例2:

In [54]: mydict={}

In [55]: mydict['val2']=200

In [56]: exec "val1=val2" in mydict

In [57]: mydict.keys()
Out[57]: ['__builtins__', 'val2', 'val1']

In [58]: mydict['val2']
Out[58]: 200

In [59]: mydict['val1']
Out[59]: 200
于 2012-09-20T22:19:50.433 に答える
2

Python 3 では、その exec 行は次のように変換されます。

exec(code, module.__dict__)

Python 3 ヘルプ ファイルからの抜粋:

exec(object[, globals[, locals]]) 

いずれの場合も、省略可能な部分が省略されている場合、コードは現在のスコープで実行されます。グローバル変数のみを指定する場合は、グローバル変数とローカル変数の両方に使用される辞書である必要があります。globalslocalsが指定されている場合、それらはそれぞれグローバル変数とローカル変数に使用されます。指定されている場合、localsは任意のマッピング オブジェクトにすることができます。

于 2012-09-20T22:19:55.627 に答える
2

このinキーワードは、グローバルおよびローカル名前空間に使用する辞書を指定します。のpython 2ドキュメントからexec

いずれの場合も、省略可能な部分が省略されている場合、コードは現在のスコープで実行されます。後の最初の式のみinが指定されている場合は、グローバル変数とローカル変数の両方に使用される辞書にする必要があります。

したがって、python 3 に相当するものはexec(code, module.__dict__).

于 2012-09-20T22:21:08.063 に答える