def spam():
print "spam"
exec(spam.__code__)
垃圾邮件
但是如果 spam
需要参数怎么办?
def spam(eggs):
print "spam and", eggs
exec(spam.__code__)
TypeError: spam()需要1个参数,但未提供任何参数
假设我只能访问代码对象而无法访问函数本身,那么在执行代码对象时如何传递参数?使用eval可以吗?
编辑:由于大多数读者倾向于不相信这种用法的有用性,请看以下用例:
我想将小型Python函数保存到文件中,以便可以从另一台计算机上调用它们。(不用说,这种用例严重限制了可能的函数。)对函数对象本身进行pickle处理是行不通的,因为这只会保存函数定义所在的名称和模块。相反,我可以pickle函数的__code__
。当我再次unpickle时,显然对函数的引用消失了,这就是为什么我无法调用该函数的原因。我在运行时根本没有它。
另一个用例:
我在一个文件中编写了几个函数,用于计算一些数据并将其存储在硬盘上。这些计算需要很长时间,因此我不想每次都执行这些函数,而只想在函数实现更改时才执行它们。
我已经为整个模块而不是单个函数运行了一个版本。它通过查看实现模块的文件的修改时间来工作。但是,如果我有许多不想将其分开为单个文件的函数,则这不是一个选项。
lambda x: 10 < x < 20
可以缩减为上下界)。如果这不是一个选项,请参见 https://dev59.com/0HM_5IYBdhLWcg3wvFvI。 - user395760