Pythonプログラム内で実行される文字列があり、x [1]、x [2]のような文字列の変数を別のものに変更したい。 以前は2つの引数を持つevalを使用していましたが(2番目はreplaced_word:new_wordのdictです)、今はこのような以前にインポートしたモジュールを使用することができないことに気付きました。だから私がこれを行う場合Python2でインポートされたモジュールを失うことなく辞書でevalを使用
from math import log
eval(log(x[1], {x[1]: 1})
それは、名前のログを認識しないと言うでしょう。 グローバル変数を失うことなく、このようにevalを使用するにはどうすればよいですか? 私は実際にドキュメントの意味を理解できません: https://docs.python.org/2/library/functions.html#eval 説明も役に立ちます。
グローバルをコピーすることは非常に効率的なようです。私はこの評価を何千回も実行する必要があるだけでなく、毎回それをコピーすると、あまりにも多くのオーバーヘッドが発生するでしょうか? –
@JoaquimFerrer:ちょっと、代替アプローチを追加するための答えを更新していました。その1つは、サンドボックスを少し減らすことを犠牲にして 'globals()' dict'をコピーする必要性をバイパスします。 – ShadowRanger
入力は常に私が作成するので、心配はありません。それは完全にありがとう! –