我正在尝试在python中构建一种脚本系统,允许在运行时在python中选择和执行小段代码。
基本上我希望能够加载像
这样的小python文件for i in Foo: #not in a function.
print i
在程序的其他地方我指定Foo将会是什么。好像Foo作为整个加载的python文件的函数参数而不是单个函数
所以其他地方
FooToPass = GetAFoo ()
TempModule = __import__ ("TheSnippit",<Somehow put {'Foo' : FooToPass} in the locals>)
答案 0 :(得分:2)
在模块级别使代码具有副作用被认为是不好的风格。如果您希望模块执行某些操作,请将该代码放在函数中,使Foo
成为此函数的参数,并使用所需的值调用它。
Python的导入机制不允许预初始化模块名称空间。如果你想要这样做(在我看来,这是令人困惑和不必要的),你必须摆弄进口机制的细节。示例实现(未经测试):
import imp
import sys
def my_import(module_name, globals):
if module_name in sys.modules:
return sys.modules[module_name]
module = imp.new_module(module_name)
vars(module).update(globals)
f, module.__file__, options = imp.find_module(module_name)
exec f.read() in vars(module)
f.close()
sys.modules[module_name] = module
return module