列表和字典的增删操作是没有返回值的,None!!!。这是个很显而易见的常识。对list进行append、insert、extend,或是对dict做update等等,是直接改变list/dict的内容,操作本身没有返回值,或者说返回为None。
In [1]: list_1 = [2,5,6,7,9]
In [2]: list_1.append(233)
In [3]: list_1.extend(['ha','ha','ha'])
In [4]: list_1
Out[4]: [2, 5, 6, 7, 9, 233, 'ha', 'ha', 'ha']
In [5]: list_1.pop(2)
Out[5]: 6
以上,In [2]
和In [3]
都是没有Out输出的。不过pop例外,它是有返回值的,也就是被删掉的那颗的值。
一切都很清楚明了,有什么好说的呢。唉,第一次在这个地方被绊倒并没有觉得有什么值得说的,不过是自己基础不扎实而已。但是昨天,同样的错误,老夫又犯了一次。嘛,也就是,试图把append操作的结果赋值给一个新的列表,然后去取值的时候报错。
In [6]: list_2 = list_1.append('666')
In [7]: type(list_2)
Out[7]: NoneType
哎,好尴尬。错误犯一次,悄悄改正就好;犯两次,就得拉出来公开处刑才行。
我反思了一下,这大概是受pandas里DataFrame的影响(pandas是python的一个高阶数据分析包,DataFrame是它的数据格式)。通常对一个df进行操作会返回一个副本/copy或者映射,然后顺手赋值给一个新的变量。结果我就顺到list这里了。
所以常常说哪里哪里是个坑,有一半的原因是这个地方逻辑太复杂、混乱,还有一半(对我来说是一大あ半)是因为与过往的经验冲突导致的。就像学Java的同学看到python里不加声明的变量、函数堆在一起,会懵逼的不知所措。
罗胖(罗振宇)他们常说存量、增量什么的,这种观点越来越有道理了。存量属于过去,如果它们已经无法再当前产生效用,就因该果断舍弃。追求增量才是正道。这从经济学的角度来看,就是“沉默成本不是成本”。
最近还有一个让我吃尽苦头的东西,命名。给变量、函数命名,给输出文件命名。有时候费在命名上的精力比处理主要逻辑还多。特别是最近在写的那个需要在多个脚本之间传递文件,输出名改变,输入名也要跟着变。我遵循着最小变化的原则,小心翼翼的不去改变原来的结构,结果多费了好多事。总而言之,文件名如果多次使用,一定要用变量传递,手动输入会死人的。
唉,这也是必须狠狠地被坑几次才能深刻的领悟。公众号上的菜单栏也是这样,我一闲下来就手痒,不由得想去改改这改改那。改完之后简介就需要同步更新一下,然后一个晚上就在到处改名字玩儿了。坑die。我当时就想,这些名字要是可以用变量来引用多好啊。
人嘛,总是在犯蠢的路上慢慢前进的。只要还在进步,就不至于感到绝望。这周还因为技术收获一只小迷妹。是个很好的态势呢。再这样下去,我是不是就可以靠技术俘获小鲜肉了。想想就很兴奋啊,wakuwaku~~。(被杨小天使贴上猥琐的标签之后,咋个还很得意的维护起来了呢。)
接下来会更新一篇re模块的使用心得,吧大概。print('正则表达式真是个好东西'*10010)
.
原文地址:卖蠢日志 | 列表和字典的操作是没有返回值的,None!!!,来自我家公众号,欢迎关注。