我刚刚面对这种我无法理解的情况:
In [3]: nk1=range(10)
In [4]: nk2=range(11,15)
In [5]: nk1.extend(nk2)
In [6]: nk1
Out[6]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14]
In [7]: dir(range(10))==dir(list)==dir(range(11,15))==dir(nk1)==dir(nk2)
Out[7]: True
In [8]: print range(10).extend(range(11,15))
None
Run Code Online (Sandbox Code Playgroud)
正如你在上面看到的那样,我可以很容易地扩展nk1,但为什么不能返回最后一个语句None?
为什么它None在In[8]输入中返回(而从In[7]我们可以看到所有都是相同的)???
所以我总是要做一个range扩展它的实例???
来自python docs; 我发现了这个 ; 但我不知道上面的情况是怎么发生的.
扩展列表时,列表会就地修改.不返回新列表.
就地修改表明您正在调用的方法将在该方法执行期间对其自身进行更改.在大多数情况下(为了避免您当前遇到的混淆),这些类型的操作不会返回执行操作的对象(尽管有例外).考虑以下:
list1 = range(10)
list2 = range(10) + range(11,15) # no in place modification here.
nolist1 = list1.extend(range(11,15)) # list1 is now (0 ... 14)
nolist2 = range(10).extend(range(11,15)) # Nothing actually happens here.
Run Code Online (Sandbox Code Playgroud)
在最后一个示例中,该range函数返回一个永远不会分配给任何内容的列表.然后扩展该列表,其结果是返回值None.打印出来.