想在 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())
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.