我有一个flood
函数,它用与flood
相同的模块中定义的所有全局变量来填充调用方的命名空间:
# test.py
import inspect
a, b, c = 0, 1, 2
def flood():
inspect.getmodule(inspect.stack()[-1][0]).__dict__.update(globals())
当从另一个模块调用时,例如
# main.py
import test
test.flood()
print(a, b, c)
调用test.flood()
相当于执行from test import *
。在使用Cython时,将此功能包装在函数中非常方便,如果编译了test.py
,则from test import *
不会导入在C级别声明的变量。你知道吗
这个hack和适当的from test import *
之间的一个区别是,这个hack不能在交互式Python shell中工作。这里,由inspect.stack()[-1][0]
获得的帧对象不属于模块,因此inspect.getmodule(inspect.stack()[-1][0])
返回None
。你知道吗
如何扩展hack,使flood()
也能在交互式Python shell中淹没全局名称空间?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐