【发布时间】:2015-10-13 16:46:19
【问题描述】:
假设我有以下函数返回一个函数:
def make_square_matrix_creator(dim):
mat = np.zeros([dim, dim])
def square_matrix_creator(value):
mat += value
return mat
return square_matrix_creator
现在,此代码不起作用,因为内部函数无法访问mat。
f = make_square_matrix_creator(4)
f(3)
UnboundLocalError: local variable 'mat' referenced before assignment
我知道有几种方法可以解决这个问题;我可以将mat 设为全局:
def make_square_matrix_creator(dim):
global mat
mat = np.zeros([dim, dim])
def square_matrix_creator(value):
global mat
mat += value
return mat
return square_matrix_creator
它可以工作,但这存在与在函数中创建全局对象相关的所有问题
我可以将 mat 作为默认参数传递给内部函数;
def make_square_matrix_creator(dim):
mat = np.zeros([dim, dim])
def square_matrix_creator(value, mat=mat):
mat += value
return mat
return square_matrix_creator
但是当我在我的真实示例中尝试这个时,我遇到了可变默认值的问题。是否有其他选项可以让内部函数访问在其父函数中创建的对象?
【问题讨论】:
-
如果您使用的是 Python 3.x,您可以查看nonlocal 语句。
-
我正在使用 python 2.7 - 我将编辑我的问题
标签: python python-2.7 closures