引用显示"声明前引用的局部变量'final_ans'"的变量



下面的这段代码给出了声明之前引用的"局部变量'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声明为非本地,因为它是一个方法调用,而不是赋值。除非非局部变量首先声明为非局部变量,否则不能赋值,但它们可以被引用,例如在赋值的 RHS 上。

最新更新