当前位置: 首页 > 面试题库 >

Python:如何将参数传递给函数的__code__?

殳凯捷
2023-03-14
问题内容

以下作品:

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

垃圾邮件

但是,如果spam拿来争论呢?

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

TypeError:spam()恰好接受1个参数(给定0)

鉴于我无权访问函数本身,而只能访问代码对象,执行该函数时如何将参数传递给该代码对象?评估可能吗?

编辑:由于大多数读者倾向于不相信这样做的用处,请参见以下用例:

我想将小的Python函数保存到文件中,以便可以从其他计算机上调用它们。(在这里不必说这个用例会严重限制可能的功能。)腌制功能对象本身不起作用,因为这只会保存名称和定义功能的模块。相反,我可以给__code__该函数腌制。当我再次对其进行修复时,对函数的引用当然消失了,这就是为什么我不能调用该函数的原因。我只是在运行时没有它。

另一个用例:

我在一个文件中处理几个函数,这些函数计算一些数据并将其存储在硬盘驱动器上。计算会消耗大量时间,因此我不想每次都执行函数,而只是在函数的实现发生更改时才执行。

我有一个运行整个模块而不是功能的版本。它通过查看在其中实现模块的文件的修改时间来起作用。但是,如果我有很多不想分离在单个文件中的功能,则这不是一个选择。


问题答案:

您可以将函数更改为 接受任何参数吗?然后从本地/​​全局变量中查找变量,您可以在其中提供exec

>>> def spam():
...   print "spam and", eggs
... 
>>> exec(spam.__code__, {'eggs':'pasta'})
spam and pasta

(为什么不将整个函数作为字符串发送?Pickle "def spam(eggs): print 'spam and', eggs",而exec字符串(经过验证)在另一侧。)



 类似资料:
  • 问题内容: 这似乎是一个愚蠢的问题,但是我是这个话题的新手。我正在致力于关于节点js的承诺。我想将参数传递给Promise函数。但是我不知道。 而功能类似于 问题答案: 将Promise包裹在一个函数中,否则它将立即开始工作。另外,您可以将参数传递给函数: 然后,使用它: ES6: 用:

  • 问题内容: 我想在警报窗口中显示该人的电子邮件。但是,我不知道如何将电子邮件作为参数传递给displayAlert方法。此外,它也不会让我使用。因此,我必须将displayAlert方法分配给变量,并在onClick中使用它。我不知道为什么它不能让我直接调用它。 问题答案: ES6方式 : 使用箭头功能 匿名函数被调用并执行 ES5方式: 您可以使用并在其中传递参数来执行此操作。 您还应该传递或使

  • 问题内容: 看看这个小提琴,我必须更改什么,才能使用我在HTML中定义的参数来评估模板中的表达式?因为我通过了SAVE按钮,所以它应该调用控制器的- function? 我看不出来。感谢帮助! 问题答案: 您可以按照Roy的建议设置两种方式的数据绑定。因此,如果您既想要又绑定到本地范围,则可以 由于要传递这些值,因此可以在指令的控制器中访问它们。但是,如果您想在父作用域的上下文中运行一个函数,这似

  • 问题内容: 我的密码 第一个文件: 第二档: 在上面的代码中,仅将“数据”字典的键传递给,但我希望键值对传递。如何纠正呢? 我希望这样被修改 这是我的要求,根据此给出答案 编辑: 字典键 类 更改为 标准 问题答案: 如果要像这样使用它们,请正常定义变量名称的函数: 现在,您可以在 调用 函数时使用: 它会按您想要的方式工作。 PS 请勿使用。等保留字(例如,改用)

  • 问题内容: 这是我的代码: 当我评估f(0)时,将出现错误“ x在分配之前被引用”。 但是,当我使用“ print x”代替“ x = x + 1”时,它将起作用。 似乎在g的范围内,我只能将x用作“使用事件”,而不能用作“绑定事件”。我想问题是f仅将x的值传递给g。 我是否正确理解?如果不是,有人可以解释为什么在引用之前未定义“ x = x + 1”的左侧吗? 谢谢 问题答案: 您正确理解了它。