访问 python 模块中的全局变量



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

例如

文件 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

虽然此示例说明了如何以编程方式使用命名空间,但这是应该谨慎执行的操作。

相关内容

  • 没有找到相关文章

最新更新