假设我已经在Python 3.5中获得了代码
def factory(param):
def f(num):
print(param*num)
return f
fun = factory('a')
# how do I know, that fun was created with param='a'?
fun(3)
创建param
后如何检查fun
的值?
答案 0 :(得分:2)
可以在the __closure__
attribute of the function中找到关闭变量。您可以直接对其进行检查,但是可能最简单的方法是use inspect.getclosurevars
为您完成繁重的工作:
import inspect
def factory(param):
def f(num):
print(param*num)
return f
fun = factory('a')
print(inspect.getclosurevars(fun))
输出(globals
和builtins
的确切内容在实践中会有所不同):
ClosureVars(nonlocals={'param': 'a'}, globals={}, builtins={'print': <built-in function print>}, unbound=set())
或将其限制为直接在嵌套的非全局,非内置范围中查找的内容,请访问nonlocals
属性,该属性是dict
映射名称到封闭值的值:< / p>
>>> print(inspect.getclosurevars(fun).nonlocals)
{'param': 'a'}
答案 1 :(得分:1)
您可以通过__closure__
属性检查该函数的关闭情况:
>>> fun.__closure__[0].cell_contents
'a'