下面的这段代码给出了“声明之前引用的局部变量'final_ans'”
def powerset(array):
# Write your code here.
def helper(arr, idx, temp=[]):
if idx == len(arr):
final_ans+=[temp]
return
helper(arr,idx+1, temp + [arr[idx]])
helper(arr,idx+1, temp)
return
final_ans = []
helper(array,0,[])
return final_ans
print(powerset([1,2,3]))
然而,下面的代码片段可以正常工作,没有任何错误。
def powerset(array):
# Write your code here.
def helper(arr, idx, temp=[]):
if idx == len(arr):
final_ans.append(temp)
return
helper(arr,idx+1, temp + [arr[idx]])
helper(arr,idx+1, temp)
return
final_ans = []
helper(array,0,[])
return final_ans
print(powerset([1,2,3]))
我知道在第一个代码段中使用 nonlocal
将使代码正常工作。但我无法理解使用 append
而不是 +=
来改变范围。
最佳答案
即使没有将 Final_ans 声明为非本地,Append 也可以工作,因为它是方法调用,而不是赋值。非局部变量不能被赋值,除非它们首先声明为非局部变量,但它们可以被引用,例如在赋值的 RHS 上。
关于python - 引用一个显示 'local variable ' Final_ans' 在声明之前引用的变量',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59001322/