Python序列类型的extend和+的区别

来源:互联网 发布:centos u盘安装 编辑:程序博客网 时间:2024/05/21 10:09

      刚才写一个Python递归函数,遇到了一个问题,就是序列类型的extend方法和+运算符号的区别。

      listA.extend(listB)  和   listA+listB    的效果都是把两个序列类型的元素相加,形成一个新的序列。    extend()的运算效率比+更高。因此我一直都使用extend方法做序列的合并。

      但是, listA.extend(listB) 的返回结果是None,而不是合并后的序列。listA序列是合并后的序列。

      listA+listB返回的是新的序列。

 

      我在写下面这个递归的函数时因为extend方法的这个特点,得到的总是None对象。   改用+后正常。

 

def getResourceSelfAndParentsDetail(obj):

 

    if(hasattr(obj,"parent")==False or obj.parent==None):

 

        return [obj]

 

 

    else:

        return [obj]+(getResourceSelfAndParentsDetail(obj.parent))

 

测试代码:

class Obj(object):

    def __init__(self,val):

        self.val=val

    def __str__(self):

        return str(self.val)

 

    pass

if __name__ == '__main__':

 

       obj1=Obj(1)

       obj2=Obj(2)

       obj3=Obj(3)

 

       obj2.parent=obj1

       obj3.parent=obj2

       ret=getResourceSelfAndParentsDetail(obj3)

       for obj in ret:

           print str(obj)

显示正确的

3

2

1

 

原创粉丝点击