如何在python

时间:2016-11-23 04:04:26

标签: python-2.7

假设我已经定义了这样的函数:

def calc():
    print x

我想在调用之前通过某种方式将var x注入函数的本地。

这看起来像我添加了一个关键字x,我可以在函数calc()中使用x而不定义它。 x将由调用calc()的外部函数定义。

也许这是一个愚蠢的问题,但我只想知道是否可以这样做?

如果我们在调用它之前无法修改它的本地人,我们可以尝试另一种方式吗?假设我们使用装饰器或其他东西将func()的定义自动修改为

def clac(x):
    print x

也许这样,我们需要使用函数的字节码?

有人可以提供一些建议吗?

1 个答案:

答案 0 :(得分:2)

这似乎是一件非常有悖常理的事情,但它实际上是可能的。对未定义名称的引用编译为全局变量引用,因此我们只需要使用不同的全局环境调用该函数。不幸的是,函数的func_globals属性是只读的,所以我们必须使用函数的代码对象来玩一些技巧。试试这个:

exec calc.func_code in {'x': 'blah'}

请注意,您传递的字典将通过添​​加'__builtins__'插槽进行修改 - 这允许该函数访问Python的内置函数和常量。