Python列表+列表与list.append()

wor*_*138 6 python list

今天我花了大约20分钟试图弄清楚为什么它按预期工作:

users_stories_dict[a] = s + [b] 
Run Code Online (Sandbox Code Playgroud)

但这会有一个None价值:

users_stories_dict[a] = s.append(b)
Run Code Online (Sandbox Code Playgroud)

任何人都知道为什么append函数不返回新列表?我正在寻找做出这个决定的某种合理理由; 它现在看起来像是一个Python新手.

App*_*ear 11

append通过实际修改列表来工作,所以所有的魔法都是副作用.因此,返回的结果append为None.换句话说,人们想要的是:

s.append(b)

然后:

users_stories_dict[a] = s

但是,你已经想出了那么多.至于为什么这样做,虽然我真的不知道,我的猜测是它可能与0(或false)退出值有关,表明操作正常进行,并返回None角色为的函数在适当的位置修改他们的参数,您报告修改成功.

但我同意如果它返回修改后的列表会很好.至少,Python的行为在所有这些功能中是一致的.

  • 我认为向程序员/读者明确哪些功能正在改变数据是非常有用的.例如,如果你不期望它有一个= b.sort()排序b将是非常不幸的. (7认同)
  • "list.append"返回"None"的原因是"命令查询分离"原则,正如Alex Martelli所说[这里](http://stackoverflow.com/questions/1682567#1682601). (3认同)

P2b*_*2bM 9

append()方法返回一个None,因为它通过添加作为元素追加的对象来修改它自己的列表,而+操作符连接两个列表并返回结果列表

例如:

a = [1,2,3,4,5]
b = [6,7,8,9,0]

print a+b         # returns a list made by concatenating the lists a and b
>>> [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

print a.append(b) # Adds the list b as element at the end of the list a and returns None
>>> None

print a           # the list a was modified during the last append call and has the list b as last element
>>> [1, 2, 3, 4, 5, [6, 7, 8, 9, 0]]
Run Code Online (Sandbox Code Playgroud)

因此,您可以看到最简单的方法就是将两个列表一起添加,因为即使将列表b附加到使用append(),您也无法获得所需的结果而无需额外的工作