使用+=操作符时出现UnboundLocalError错误

14 浏览
0 Comments

使用+=操作符时出现UnboundLocalError错误

我发现Python有两种(或更多)连接列表的方式:

一种方法是使用extend()方法:

a = [1, 2]
b = [2, 3]
b.extend(a)

另一种方法是使用加号(+)运算符:

b += a

现在我想知道:这两种选项中哪一种是“Pythonic”连接列表的方法,它们之间有什么区别?(我查看了官方Python教程,但没有找到任何关于此主题的内容。)

admin 更改状态以发布 2023年5月21日
0
0 Comments

你不能使用+=操作符对非本地变量进行操作(非函数本地变量和全局变量)

def main():
    l = [1, 2, 3]
    def foo():
        l.extend([4])
    def boo():
        l += [5]
    foo()
    print l
    boo()  # this will fail
main()

这是因为在扩展的情况下,编译器将使用LOAD_DEREF指令加载变量l,但对于+=,它将使用LOAD_FAST - 然后你将得到*UnboundLocalError:在赋值之前引用本地变量'l'*的错误。

0
0 Comments

在字节码级别唯一的区别就是使用.extend方法会涉及一个函数调用,在Python中稍微费用更高一些,而使用INPLACE_ADD则不需要。

这实际上并不是你应该担心的东西,除非你进行这个操作数十亿次。然而,瓶颈可能在其他地方。

0