让我们考虑一下我们有一个这样的函数和一个内部函数(我们无法更改):
from functools import wraps
def outer_f(some_callable):
def inner_f(v):
return some_callable(v) + 1
return inner_f
我们只获得一个函数'func',它是outer_f的调用版本,它对应于inner_f,如下所示:
>>> func = outer_f(int)
在这种情况下,名为 'some_callable' 的变量是 int 类型,如果我们使用参数调用 func,我们会得到如下答案:
>>> func('1')
2
当我只有func函数实例(这意味着在调用 external_f之后)时,我想从函数外部访问some_callable。
如果我没记错的话,some_callable 是函数 inner_f (func.func_code.co_freevars) 的一个自由变量。我怎么知道 func 是用参数 int 调用的,只看 func 呢?
我无法使用检查模块或查看函数的属性来解决问题。使用跟踪模块调用 func 然后检查堆栈跟踪或使用 pdb 之类的方法似乎很有希望,但它们会是一种丑陋的 hack。
这个问题只是简化为从外部访问函数范围的自由变量。
那么我怎么知道自由变量'some_callable'是'int'而不执行func呢?