一般的に、あなたが求めることは不可能です(あなたが間違いなく期待する結果で)。たとえば、「任意のコード」がであると想像してくださいx = 23
。x
このコードを「呼び出し元で」実行するための魔法のような方法を見つけたと仮定すると、これにより、呼び出し元のローカル変数のセットに新しい変数が追加されますか?いいえ、そうではありません-Pythonコンパイラによって実行される重要な最適化は、def
実行時にローカル変数の正確なセット(関数の本体で割り当てられる、またはバインドされるすべてのベアネーム)を一度に定義することです。そして、それらのベアネームへのすべてのアクセスと設定を、スタックフレームへの非常に高速なインデックス作成に変えます。(たとえば、exec ''
考えられるすべての発信者の開始時に-結果として、システムのパフォーマンスがフロアを介してクラッシュするのを確認します)。
発信者のローカルベアネームに割り当てることを除いexec thecode in thelocals, theglobals
て、おおよそあなたが望むことをするかもしれません、そしてinspect
モジュールはあなたが半合理的な方法で発信者のローカルとグローバルを取得することを可能にします(深い黒魔術まで-それは私を行かせますプロダクションコードで実行されることを示唆している同僚への郵便-それを「半合理的」と呼ぶのにふさわしくない賞賛でこれまでに称賛されることができます;-)。
ただし、「任意のコードを実行できるようにしたい」と指定します。そして、その明確な仕様に対する唯一の解決策(そして、答えが簡単になるので、非常に正確であることに感謝します!)は、次のとおりです。次に、別のプログラミング言語を使用します。