20160105
实时改变的变量:最好单独分配一个方法,将其当做参数传入——变化即使用参数;
*一定要注意那些实时变化的东西!可能会带来隐患
eg:
def sortNew(self,bugdetailist):
sorted = []
for i in range(len(bugdetailist)):
if bugdetailist[i][4] == 'new':
sorted.append(bugdetailist[i])
bugdetailist.pop(i)
bugdetailist = sorted + bugdetailist
return bugdetailist
当调用这个方法的时候,会报错:IndexError: list index out of range,很容易发现每一次循环的时候(满足了 if )bugdetailist 会消除掉一个元素,然而似乎
for i in range(len(bugdetailist)):
中的 len(bugdetailist) 并不会发生变化依然执着的保持 “原bugdetailist” 的长度,但实际的列表已经缩小了,所以超出了长度。
那么解决方案就是——
def sortNew(self,bugdetailist):
sorted = []
for i in range(len(bugdetailist)):
newindex = self.findNew(bugdetailist)
sorted.append(bugdetailist[newindex])
bugdetailist.pop(newindex)
bugdetailist = sorted + bugdetailist
return bugdetailist
def findNew(self,bugdetailist):
i = 0
for i in range(len(bugdetailist)):
if bugdetailist[i][4] == 'new':
return i
return i #notice there must return one value
将变化的每次循环都会列表当做参数,单独使用一个方法来处理,一对一(一个变化一个方法)。
尽管 i 还是越界了,但是越界的 i 却没有被使用了。
将变化的每次循环都会列表当做参数,单独使用一个方法来处理,一对一(一个变化一个方法)这样每一次的变化都有单独对应方法解决就会好得多。