如何访问模块内的所有全局变量(我不知道他们是谁)?
例如
文件 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')
你想在这里使用 eval() 而不是 exec()。
但是您实际上要做什么.... eval() 和 exec() 的使用通常是不好的风格,通常不需要(在安全考虑方面尤其可怕)。
为什么你不能直接使用(好吧,如果你真的有字符串,但是因为它几乎都在代码中,看起来你因为某种原因有字符串)
(重写代码):
文件 m.py:
def a(s):
print s
主要代码:
import m
x=2
m.a(x * 2)
您可以通过直接导入特殊__main__
模块来破解它。在m.py
:
def print_global(name):
import __main__
print getattr(__main__, name)
在主模块中:
import m
x = 2
m.print_global('x') # prints 2
虽然此示例说明了如何以编程方式使用命名空间,但如果有的话,这种事情应该尽量少做。