1

如何访问模块内的所有全局变量(我不知道他们是谁)?

例如

文件 m.py:

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

主要代码:

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

3 回答 3

1

你想在这里使用 eval() 而不是 exec()。

但是您实际上要做什么.... eval() 和 exec() 的使用通常是不好的风格,通常不需要(在安全考虑方面尤其可怕)。

于 2012-11-21T20:24:04.210 回答
0

为什么你不能直接使用(好吧,如果你真的有字符串,但是因为它几乎都在代码中,看起来你因为某种原因有字符串)

(重写代码):

文件 m.py:

def a(s):
    print s

主要代码:

import m
x=2
m.a(x * 2)
于 2012-11-21T20:35:53.703 回答
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 回答