【问题】
Python中一个List变量allPageUrlList:
调用reverse后,结果不是期望的,颠倒过来的list,却是None:
print "reversedPageUrlList=",reversedPageUrlList; |
值为:
reversedPageUrlList= None |
【解决过程】
1.找了下,结果只找到这个官方解释:
5.6.4. Mutable Sequence Types
s.reverse() reverses the items of s in place
Note:The sort() and reverse() methods modify the list in place for economy of space when sorting or reversing a large list. To remind you that they operate by side effect, they don’t return the sorted or reversed list.
但是什么是side effect,还是不懂。
2.后来找到:a=[1,2,3,4].reverse() – why "a" is None?,看到其讨论说到:
b = [1,2,3,4]
a = b.reverse()
would change the value of b.
才想起来,原来这个reverse函数,针对列表的操作,其结果是直接改变列表本身(为了节省空间),所以,直接就把原先的list改为你所想要的reversed后的结果了,而返回值,是空的,不返回任何值。
所以,本身直接使用:
allPageUrlList.reverse(); # -> is OK, the self is reversed !!! |
即可实现把allPageUrlList翻转。
【总结】
对于List等Sequence等类型的变量,比如此处的List变量,其内置函数reverse,是直接操作变量本身,调用reverse后,变量本身的值就是reverse后的值了,所以不能出现:
reversedList = orignalList.reverse();
的用法,而应该是:
orignalList.reverse(); reversedList = orignalList;
此原则,同样适用于sort函数。