在python中访问封闭函数的变量

数学

我想写一个函数,它返回一个函数。

from types import FunctionType
import numpy as np    

def outer_function(beta: np.array, K: np.array, increment: str,
                   augmented: bool, prior: FunctionType=None, **kwargs) -> FunctionType:
            
        def g(x: float) -> float:
            if prior is None:
                prior = x**2
            return beta+x+prior
        return g

我遇到的问题是外部函数的某些变量不在内部函数的范围内,而其他变量则在

 test = outer_function(np.array(0), np.array([1,2,3]), increment="hello", augmented=False, prior=None, alpha=10)

 In [91]: pdb.runcall(test, 10)
> <ipython-input-87-16d13c025c81>(5)g()
-> if prior is None:
(Pdb) print(prior)
*** NameError: name 'prior' is not defined
(Pdb) dir()
['beta', 'x']
(Pdb) print(x)
10
(Pdb) 

正如你所看到的,我只得到变量xbeta. 但是所有其他变量都看不到g. 如何使内部可以访问外部的所有变量?

深渊

这是因为您可能正在重新分配prior. python 编译器因此标记prior为本地(并忽略参数 to outer_function

这是一个修复:

def outer_function(beta: np.array, K: np.array, increment: str,
                   augmented: bool, prior: FunctionType=None, **kwargs) -> FunctionType:
            
        def g(x: float) -> float:
            p = prior
            if p is None:
                p = x**2     # reassign to p
            return beta + x + p
        return g

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章