モジュール内のすべてのグローバル変数にアクセスするにはどうすればよいですか (それらが誰であるかは事前にわかりません)。
例えば
ファイル m.py:
def a(s):
exec('print '+s)
メインコード:
import m
x=2
m.a('x*2')
モジュール内のすべてのグローバル変数にアクセスするにはどうすればよいですか (それらが誰であるかは事前にわかりません)。
例えば
ファイル m.py:
def a(s):
exec('print '+s)
メインコード:
import m
x=2
m.a('x*2')
ここでは、exec() ではなく eval() を使用します。
しかし、実際に何をしようとしているのですか.... eval() と exec() の使用は、一般的に悪いスタイルであり、一般的には必要ありません (特にセキュリティの考慮事項に関しては怖いです)。
__main__
特別なモジュールを直接インポートすることでハッキングできます。でm.py
:
def print_global(name):
import __main__
print getattr(__main__, name)
そしてメインモジュールでは:
import m
x = 2
m.print_global('x') # prints 2
この例は、名前空間をプログラムで操作する方法を示していますが、これは、実行する場合でも控えめに行う必要があります。
なぜ使用できないのですか (まあ、何らかの方法で文字列を真剣に使用している場合でも、とにかくほとんどすべてがコード内にあるため、何らかの理由で文字列が周りにあるように見えます)
(書き直したコード):
ファイル m.py:
def a(s):
print s
メインコード:
import m
x=2
m.a(x * 2)