假設我有以下函數返回一個函數:訪問變量
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
它的工作原理,但是這一切與職能範圍內使全局對象相關的問題
我可以通過墊作爲默認參數傳遞給內部函數;
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
但是,當我在我的真實世界的例子中嘗試了這一點,我遇到了可變默認值的問題。是否有其他選項可以讓內部函數訪問在其父函數中創建的對象?
使用'nonlocal' .. – styvane
如果您正在使用Python 3.x中,你可以看看[外地](https://docs.python.org/3/reference/simple_stmts.html#grammar- token-nonlocal_stmt)語句。 –
我使用Python 2.7 - 我將編輯我的問題 –