为了账号安全,请及时绑定邮箱和手机立即绑定

连接两个列表 - '+ ='和extend()之间的区别

连接两个列表 - '+ ='和extend()之间的区别

手掌心 2019-08-31 10:43:53
我已经看到实际上有两种(可能更多)方法在Python中连接列表:一种方法是使用extend()方法:a = [1, 2]b = [2, 3]b.extend(a)另一个使用加号(+)运算符:b += a现在我想知道:这两个选项中的哪一个是“pythonic”方式进行列表连接,两者之间是否存在差异(我查阅了官方Python教程但未找到任何关于此主题的内容)。
查看完整描述

3 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

字节码级别的唯一区别在于,这种.extend方式涉及函数调用,这在Python中略高于INPLACE_ADD。


除非你执行这项行动数十亿次,否则你应该担心的事情真的没什么。但是,瓶颈可能会出现在其他地方。


查看完整回答
反对 回复 2019-08-31
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

您不能将+ =用于非局部变量(对于函数而言不是局部的变量,也不是全局变量)


def main():

    l = [1, 2, 3]


    def foo():

        l.extend([4])


    def boo():

        l += [5]


    foo()

    print l

    boo()  # this will fail


main()

这是因为对于扩展案例编译器将l使用LOAD_DEREF指令加载变量,但对于+ =它将使用LOAD_FAST- 并且你得到*UnboundLocalError: local variable 'l' referenced before assignment*


查看完整回答
反对 回复 2019-08-31
?
MMTTMM

TA贡献1869条经验 获得超4个赞

你可以链接函数调用,但你不能直接+ =函数调用:


class A:

    def __init__(self):

        self.listFoo = [1, 2]

        self.listBar = [3, 4]


    def get_list(self, which):

        if which == "Foo":

            return self.listFoo

        return self.listBar


a = A()

other_list = [5, 6]


a.get_list("Foo").extend(other_list)

a.get_list("Foo") += other_list  #SyntaxError: can't assign to function call


查看完整回答
反对 回复 2019-08-31
  • 3 回答
  • 0 关注
  • 690 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信