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

      刚才写一个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
Tags:  python平台 python

延伸阅读

最新评论

发表评论