sort() 和 reverse() 方法只是对原来的列表进行操作,不会生成新的列表——找bug
找bug
看例子:
test_scores = [100, 97, 76, 84, 93, 98, 86, 92, 76, 88, 95, 90, 95, 93]
new_scores = test_scores.sort()
new_scores = new_scores.reverse()
print(new_scores)
# 报错:AttributeError: 'NoneType' object has no attribute 'reverse' in line 3.
#(属性错误:第三行中,NoneType 对象没有 reverse 属性。)
原来是第二行代码中, new_scores = test_scores.sort()
,而不是 test_scores.sort()
。
第三行写的是 new_scores = new_scores.reverse()
,也不是我们要求写的 test_scores.reverse()
.
这样写是不可以的,因为 sort()
和 reverse()
方法只是对原来的列表进行操作,不会生成新的列表,所以它们是没有返回值的,或者说,返回的是 None
。因此,第二行中,new_scores
赋到的值是 None
,再对 None
调用 reverse()
方法当然会出错。
下面我们来用代码验证一下:
test_scores = [100, 97, 76, 84, 93, 98, 86, 92, 76, 88, 95, 90, 95, 93]
new_scores = test_scores.sort()
print(new_scores)
# 输出:None
调用 test_scores.sort()
方法,Python 会立刻对 scores 列表本身进行排序。不要以为调用 test_scores.sort()
方法会返回一个排序后的列表,其实返回的是 None
,这时下一行调用方法 new_score.reverse()
就相当于调用了 None.reverse()
,又把电脑整懵了。
在实际运用中,我们直接调用 sort()
方法来给列表中的元素排序,用 reverse()
直接倒转原列表,不必重新赋值。