下面的这段代码给出了声明之前引用的"局部变量'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 上。