1. 程式人生 > >學習Python需要了解的十種方法,你都知道嗎?

學習Python需要了解的十種方法,你都知道嗎?

Python 2與Python 3不相容,這讓我不知道該選擇哪個版本的Python。最終我選擇了Python 2,因為當時許多我需要用的庫都與Python 3不相容。

但實際上,日常使用中最大的版本差異是輸出(print)和除法行為。現在我在Python 2的程式碼中都用import from future來匯入Python 3的輸出和除法。現在我用到的幾乎所有庫都支援Python 3,因此會很快遷移到Python 3中。

enumerate(list)

很明顯,迭代列表時,應該同時迭代其中的元素及其索引,但在很長一段時間內,我都尷尬的使用計數變數或切片。

鏈式比較操作符

由於我以前使用的是靜態語言(在這些語言中該用法有二義性),從來沒有將兩個比較操作符放在一個表示式中。在許多語言中,4 > 3 > 2會返回False,因為4 > 3的結果是布林值,而True > 2將得出False。

collections.Counter

Python的集合庫看上去是最好的。在計算需要集合中元素的個數時,StackOverflow找到的答案是建立有序字典,但我堅持使用一個程式碼片段來建立字典,計算結果中元素出現的頻率。直到有一天,我發現可以用collections.deque。

字典推導

Python開發者的一個重要標誌就是理解列表推導,但最終我發現字典推導也很有用,特別是在交換字典的鍵和值的時候。

用subprocess執行shell命令

注意,用os庫完成這個特定命令比用subprocess更好。我只想有一個大家都熟悉的命令。同時,一般來說,在subprocess中使用shell=True引數是非常糟糕的主意,在這裡使用這個引數僅僅是為了能在一個IPython notebook單元中放置命令的輸出。不要自己使用這個引數!下面是用os模組執行shell命令

注意,這裡的dir命令會立刻在shell中輸出,不能夠儲存到檔案(變數)中,如果想要儲存到變數中,可以使用popen:

字典的.get()和.iteritems()方法

字典的get()方法可以設定預設值,當用get()查詢的鍵不存在時,返回方法中的預設值引數是很有用的。與列表中的enumerate()相同,可以用鍵值元組迭代字典中的元素。

如果要用for迭代輸出字典,就要用到字典的iteritems()方法,這個方法在python3.x中已經廢除了,取代的是items()方法,items()方法在python2.x中也存在

用於交換元素的元組解包

在VB中,每當需要交換兩個變數時,都要用要一個愚蠢的臨時變數:c = a; a = b; b = c

內省工具Introspection tools

我知道dir()方法,我本以為help()方法和IPython中的?魔法命令是一樣的,但help()的功能更強大。

輸出:

PEP-8相容的字串連線

PEP8是Python編碼樣式指南。撇開其他的不看,PEP8要求每行不能超過80個字元,超過的部分要換行並縮排。

可以通過反斜槓、帶逗號“,”的圓括號“()”、或者額外的加號“+”來完成換行。但對於多行字串,這些解決方案都不夠優雅。Python有個多行字串記號,即三個引號,但這樣無法換行後保持縮排。

還有一個方法,那就是不帶逗號的圓括號。我不知道為什麼這種方式能工作,但能用就行。