gpt4 book ai didi

python - 如何将参数传递给函数的 __code__?

转载 作者:IT老高 更新时间:2023-10-28 20:26:50 24 4
gpt4 key购买 nike

以下作品:

def spam():
print "spam"
exec(spam.__code__)

spam

但是如果 spam 接受参数怎么办?

def spam(eggs):
print "spam and", eggs
exec(spam.__code__)

TypeError: spam() takes exactly 1 argument (0 given)

鉴于我无法访问函数本身而只能访问代码对象,我如何在执行代码对象时将参数传递给代码对象? eval可以吗?

编辑:由于大多数读者往往不相信它的用处,请参阅以下用例:

我想将小的 Python 函数保存到一个文件中,以便它们可以被调用,例如从另一台计算机。 (这里不用说这个用例严重限制了可能的函数。)对函数对象本身进行酸洗是行不通的,因为这只保存了定义函数的名称和模块。相反,我可以腌制函数的 __code__。当我再次 unpickle 时,对函数的引用当然消失了,这就是我无法调用该函数的原因。我只是在运行时没有它。

另一个用例:

我在一个文件中处理多个函数,这些函数计算一些数据并将其存储在硬盘上。计算消耗大量时间,所以我不想每次都执行函数,而是只在函数的实现发生变化时执行。

我有一个针对整个模块而不是函数运行的版本。它通过查看实现模块的文件的修改时间来工作。但如果我有许多不想在单个文件中分离的功能,这不是一个选项。

最佳答案

我完全反对使用 __code__。

虽然我是一个好奇的人,但理论上有人可以这样做:

code # This is your code object that you want to execute

def new_func(eggs): pass
new_func.__code__ = code
new_func('eggs')

再一次,我永远不想看到它被使用。如果您想在运行时加载代码,您可能需要查看 __import__

关于python - 如何将参数传递给函数的 __code__?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5874558/

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