想在 Python 3 上封装个将文件作为代码动态执行的函数,exec
的参数globals
,locals
的默认值分别是当前上下文的 globals()
和locals()
,自己封装的函数如何实现这种效果?
def file(filepath,globals=globals(),locals=locals())
没有效果。exec
的实现,发现被定义在def exec(__object: Union[str, bytes, CodeType], __globals: Optional[Dict[str, Any]] = ..., __locals: Optional[Mapping[str, Any]] = ...) -> Any: ...
,直接使用这个参数列表会导致语法错误。目前的函数是这样定义的
def file(filepath,globals,locals):
with open(filepath, 'r', encoding='utf8') as textFileObj:
return exec(compile(textFileObj.read(), filepath, 'exec'),globals,locals)
调用的时候只能这样手动传入,虽然可以通过片段等方法简化这个过程,实现类似的效果,但总归是默认值更方便。
Exe.file(Path.here(__file__,'HelloWorld.py'),globals(),locals())