python函数如何将其所有变量放在全局命名空间中?

时间:2012-10-20 23:13:19

标签: python metaclass

创建一个在globals()或另一个字典中存储其成员定义的类是可能的(尽管通常不是一个好主意):

oddclass = type("oddclass", (object,), globals())

有没有办法对函数做同样的事情,以便它的所有局部变量都存储在全局(或模块)命名空间中,而不是它自己的?

通过声明变量global,我可以一次获得一个变量的相同效果:

def myfunction():
    global x
    x = 10

我正在寻找的是一种一般方式,以便对myfunction的所有内部变量(也适用于那些尚未在顶部声明的内部变量)实现相同的效果,理想情况下,可以轻松添加某种单线,然后在不再需要时将其移除。

PS。我问这个问题是因为我对python管理函数名称空间的方式感到好奇。我的动机是在某些情况下使用它作为临时调试辅助工具(一个神秘失败的大量本地数据的函数),但不要小心:我可以使用global如上。这个问题是关于python函数内部的。

1 个答案:

答案 0 :(得分:1)

这有效

>>> def test():
    x = 10
    y = 'Some string'
    for k, v in locals().items():
        globals()[k] = v


>>> test()

>>> x
10
>>> y
'Some string'

请记住,这是非常不安全的技术,不应该使用