只要您將值賦給給定範圍內的變量,該變量被假定爲該範圍的本地。根據您使用的Python,您需要使用非本地(Python 3)或使用參數傳遞值(Python 2)。
這裏是的Python 2:
def toFloat(puntosX, aproxY, puntosY): # now the names of the enclosing function can be passed to the toFloat function
puntosX = [float(x) for x in puntosX]
aproxY = [float(y) for y in aproxY]
puntosY = [float(y) for y in puntosY]
在的Python 3:
def toFloat():
nonlocal puntosX, aproxY, puntosY # the names now refer to the enclosing scope rather than the local scope
puntosX = [float(x) for x in puntosX]
aproxY = [float(y) for y in aproxY]
puntosY = [float(y) for y in puntosY]
global
將在這種情況下不工作,因爲你引用一個封閉的名字功能。
還有一件事,你可能試圖給封閉範圍中的名稱賦新值。您目前的策略不會奏效,因爲您正在爲最內層的函數中的這些名稱分配新對象。 (列表解析創建新列表。)如果您需要保留新值,則需要(例如)將這些值返回到封閉範圍並將原始名稱重新分配給新值。例如,在Python 2:
def taylorVazquez(fx,a,b,n,puntos):
puntosX = linspace(a,b,num=puntos)
aproxY = []
puntosY = []
def toFloat(puntosX, aproxY, puntosY): # now the names of the enclosing function can be passed to the toFloat function
puntosX = [float(x) for x in puntosX]
aproxY = [float(y) for y in aproxY]
puntosY = [float(y) for y in puntosY]
return puntosX, aproxY, puntosY
puntosX, aproxY, puntosY = toFloat(puntosX, aproxY, puntosY) # now you can reassign these names to the new values
不像global
,你不能分配新值這些名字,並讓他們保持封閉範圍。