1

モジュール内のすべてのグローバル変数にアクセスするにはどうすればよいですか (それらが誰であるかは事前にわかりません)。

例えば

ファイル m.py:

def a(s):
    exec('print '+s)

メインコード:

import m
x=2
m.a('x*2')
4

3 に答える 3

1

ここでは、exec() ではなく eval() を使用します。

しかし、実際に何をしようとしているのですか.... eval() と exec() の使用は、一般的に悪いスタイルであり、一般的には必要ありません (特にセキュリティの考慮事項に関しては怖いです)。

于 2012-11-21T20:24:04.210 に答える
0

__main__特別なモジュールを直接インポートすることでハッキングできます。でm.py

def print_global(name):
  import __main__
  print getattr(__main__, name)

そしてメインモジュールでは:

import m
x = 2
m.print_global('x')  # prints 2

この例は、名前空間をプログラムで操作する方法を示していますが、これは、実行する場合でも控えめに行う必要があります。

于 2012-11-21T20:31:27.843 に答える
0

なぜ使用できないのですか (まあ、何らかの方法で文字列を真剣に使用している場合でも、とにかくほとんどすべてがコード内にあるため、何らかの理由で文字列が周りにあるように見えます)

(書き直したコード):

ファイル m.py:

def a(s):
    print s

メインコード:

import m
x=2
m.a(x * 2)
于 2012-11-21T20:35:53.703 に答える