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() 直接倒转原列表,不必重新赋值。

 
原文地址:https://www.cnblogs.com/mingzhuqi/p/13234548.html