以下作品:
def spam():
print "spam"
exec(spam.__code__)
spam
但是,如果垃圾邮件发生争议呢?
def spam(eggs):
print "spam and", eggs
exec(spam.__code__)
TypeError: spam() takes exactly 1 argument (0 given)
给定的是,我无法访问该函数本身,而只能访问一个代码对象,在执行代码对象时如何传递参数?有可能用eval吗?
编辑:由于大多数读者倾向于不相信这一点的用处,请参阅以下内容:
我想将一些小的python函数保存到一个文件中,这样它们可以被称为例如。从另一台电脑。 (这里不用说这个用法限制了可能的功能。)酸洗功能对象本身不能工作,因为这只能保存定义功能的名称和模块。相反,我可以选择函数的__code__。当我再次解开它时,当然这个函数的引用消失了,这就是为什么我不能调用这个函数。我根本没有在运行时。
另一个用途:
我在一个文件中处理几个函数,计算一些数据并将其存储在硬盘驱动器上。计算消耗了很多时间,所以我不想每次都执行这些功能,但只有当功能的实现改变时才会执行。
我有一个版本的运行一个整个模块,而不是一个功能。它可以通过查看实现模块的文件的修改时间来工作。但是如果我有很多不想在单个文件中分离的功能,这不是一个选择。