如何获取工厂功能的参数

时间:2019-04-01 22:54:25

标签: python python-3.x scope closures

假设我已经在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的值?

2 个答案:

答案 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))

输出(globalsbuiltins的确切内容在实践中会有所不同):

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'