如何访问模块内的所有全局变量(我事先不知道它们是谁)?
例如
文件 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
虽然此示例说明了如何以编程方式使用命名空间,但这是应该谨慎执行的操作。