1

次のように、Python スクリプトの途中で対話型コンソールをセットアップできます。

import code

a, b = 5, 7
c = [1, 2, 34]
shareVars = {'a':a, 'b':b, 'c':c}
shell = code.InteractiveConsole(shareVars)
print 'Before interacting, variables are: ', a, b, c
shell.interact('Available variables: %s' % ', '.join(shareVars.keys()))
print 'Done interacting, variables are: ', a, b, c

ウィンドウを押すCtrl+Zと、セッションはスクリプトに戻り、対話型セッションに送信された変数の値を出力します。

ここで、対話型セッションからスクリプトに変数への変更を何らかの方法で伝えたいと考えています。これは、インタラクティブ セッションで可変オブジェクトのインプレース変更に対してのみ機能するように見えることに気付きました。

たとえば、インタラクティブ セッションで次のように入力すると、次のようになります。

>>> c.append(5)    # change will be carried over to the script
>>> c = [56, 67]  # c will remain unchanged in the original script
>>> a+=3           # a will remain unchanged in the original script

メインスクリプトを終了すると、次の出力が得られます。

Done interacting, variables are: ', 5, 7, [1, 2, 34, 5]

可変オブジェクトのインプレース変更と他のすべての種類の変更との間のこの区別を取り除く方法はありますか? 対話型セッションからスクリプトに変数を簡単に戻すにはどうすればよいですか? pickle-unpickleルートに行かなければなりませんか?

4

1 に答える 1

4

辞書shareVarsは、インタラクティブ シェルが動作する名前空間です。その名前空間への割り当ては、そのディクショナリに直接反映されます。

特定の変数を往復する必要がある場合は、それらの変数をshareVars辞書から設定する必要があります。

a, b, c = shareVars['a'], shareVars['b'], shareVars['c']

Python の他の場所と同様に、対話型シェルで変数を再バインドしても、古い値への他の参照は更新されません。

于 2013-06-15T12:05:10.980 に答える