zoukankan      html  css  js  c++  java
  • 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() 直接倒转原列表,不必重新赋值。

     
  • 相关阅读:
    【转】数据库分页Java实现
    【转】ibatis的简介与初步搭建应用
    response.setContentType()的作用及参数
    【转】mysql数据库中实现内连接、左连接、右连接
    【转】JAVA的StringBuffer类
    【转】Java学习之Iterator(迭代器)的一般用法 (转)
    函数装饰器
    闭包函数
    函数(2)
    函数(1)
  • 原文地址:https://www.cnblogs.com/mingzhuqi/p/13234548.html
Copyright © 2011-2022 走看看