gpt4 book ai didi

Python 使用 exec 从 local() 调用函数目录

转载 作者:行者123 更新时间:2023-12-01 05:38:14 24 4
gpt4 key购买 nike

目前我做这样的事情:

pyfd = open("some_python_script.py", "r")
src = pyfd.read()
pyfd.close()

exec(src) #Note, also tried eval and execfile, I use read as I do something with it.
locals()["some_function"]("foo", "bar")

它工作得很好,但是当我离开该函数时,我注意到全局变量和局部变量不再具有“some_function”函数。 (我希望它是垃圾收集)

我的问题是,如何将从某个 python 文件读取的代码附加到其他代码中?

我知道这是不好的做法并且不安全等等。但我想以一种“py2exe”我的主要部分并且我的用户可以附加Python代码的方式来实现它。他可以通过覆盖函数之类的方式破坏整个应用程序,但我可以 100% 信任用户。

谢谢,斯托拉斯

最佳答案

... when I leave the function ...

如果将 exec 调用包装在函数中,则它将在函数作用域中执行。如果您希望它在不同的范围内执行,只需将相应的字典作为参数提供给 exec *:

def load_some_script():
pyfd = open("some_python_script.py", "r")
src = pyfd.read()
pyfd.close()

exec(src, globals()) # execute the code in the global scope


load_some_script()
some_function('foo', 'bare') # should now be available at module level.

*编辑:

实际上在python2中它不是一个参数,它是元组的第二个元素,仅在python3中它是一个参数exec已成为函数而不是语句,但为了兼容性,python2 中引入了元组形式。

关于Python 使用 exec 从 local() 调用函数目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18331640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com