python - 引用一个显示 'local variable ' Final_ans' 在声明之前引用的变量'

标签 python python-3.x

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

相关文章:

使用具有不匹配变量的类的 Python 多重继承

python - 索引错误: list assignment index out of range 'xxx' ;'xxx'

python - 如何使用 Python 3 绕过 HTTP 错误 403 : Forbidden with urllib. 请求

Python 将 args 转换为 kwargs

Python:TypeError:无法将 'generator' 对象隐式转换为 str

python - 放大后无法获取任何元素的屏幕截图

python - 皮蒙戈。如果搜索到的数据不存在,则返回 null

python - 如何在python3中刷新/清除套接字中的缓冲区

python - django 访问模型需要花费很多时间

python - 如何在 PySide2 中添加边框或设置 QLayout 透明?