python可變類型踩雷記(2)

列表和字典的增刪操作是沒有返回值的,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!!!,來自我家公眾號,歡迎關注。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容