【導(dǎo)讀】2020年,你又立了什么新的 Flag?新一年,我們先為大家準(zhǔn)備 30 個(gè)非常優(yōu)秀的 Python 實(shí)踐技巧。希望這些訣竅能在實(shí)際工作中幫助大家,并且學(xué)到一些有用的知識(shí)。

1、使用 python 3
由于官方從2020年1月1日起就停止了對(duì)python2.7的更新支持,因此本教程的大部分例子都只能在python 3環(huán)境下運(yùn)行。如果你仍然在使用2.7版本,請(qǐng)先升級(jí)到python 3。
2、檢查并使用滿足需求的最小python版本
你可以在代碼中檢查Python 版本,以確保你的代碼使用者沒(méi)有使用不兼容的版本運(yùn)行腳本。使用以下代碼進(jìn)行簡(jiǎn)單的檢查:

3、使用IPython

IPython 基本上是一個(gè)增強(qiáng)的shell,僅僅是為了自動(dòng)補(bǔ)全功能,IPython也是值得使用的,但其實(shí)它還有更多作用,包括內(nèi)建的Magic命令,這里列舉了一些:
%cd:改變當(dāng)前的工作目錄
%edit:打開編輯器并在關(guān)閉編輯器后執(zhí)行鍵入的代碼
%env:顯示當(dāng)前的環(huán)境變量
%pip:install [pkgs] 在不離開交互式shell的情況下安裝功能包
%time 和 %timeit:類似于python中的time模塊,可以為代碼運(yùn)行計(jì)時(shí)
IPython的另一個(gè)有用功能是可以使用之前任意一行代碼的輸出,代碼的輸入和輸入實(shí)際上都是對(duì)象,例如可以通過(guò) Out[3] 來(lái)使用第三次運(yùn)行代碼的輸出對(duì)象。安裝IPython的指令是:
pip3 install ipython
4.列表解析式
列表解析式可以用來(lái)替換通過(guò)loop來(lái)填充列表的丑陋方法,其基本語(yǔ)法是:
[ expressionforiteminlistifconditional ]
一個(gè)非常基礎(chǔ)的例子,用于生成包含連續(xù)數(shù)字的列表:

由于可以使用表達(dá)式,因此可以通過(guò)更復(fù)雜的數(shù)學(xué)方法來(lái)生成列表:

甚至也可以調(diào)用外部函數(shù):

最后,也可以用if作為生成條件來(lái)對(duì)列表進(jìn)行過(guò)濾。在下面的例子中,只有偶數(shù)被保留:

5、檢查對(duì)象的內(nèi)存占用情況
通過(guò)sys.getsizeof(object)命令可以查看任何對(duì)象的內(nèi)存使用情況:

這是因?yàn)閞ange函數(shù)返回的是一個(gè)類對(duì)象,這個(gè)類對(duì)象表現(xiàn)為一個(gè)列表。因此使用range函數(shù)比使用實(shí)際的包含一萬(wàn)個(gè)數(shù)字的列表要更加節(jié)省內(nèi)存??梢酝ㄟ^(guò)上面第四條中提到的列表解析式創(chuàng)建一個(gè)同樣大小的實(shí)際列表:

實(shí)際內(nèi)存占用87632字節(jié),遠(yuǎn)高于通過(guò)range函數(shù)生成的對(duì)象。
6、返回多個(gè)值
Pyhon中的函數(shù)都可以返回多個(gè)變量,而不需要字典,列表或者類作為返回對(duì)象。方法如下:

對(duì)于有限數(shù)量的返回值,這是可以的。但是任何超過(guò)3個(gè)值的內(nèi)容都應(yīng)該放到一個(gè)(data)類中。
7、使用 data 類
從3.7版本開始,python提供了 data 類。與常規(guī)類或其他替代方法(如返回多個(gè)值或字典)相比,有以下幾個(gè)優(yōu)點(diǎn):
數(shù)據(jù)類需要至少一定數(shù)量的代碼
可以通過(guò)?eq?方法來(lái)比較不同的data類對(duì)象
可以?repr?通過(guò)很容易地打印一個(gè)數(shù)據(jù)類來(lái)進(jìn)行調(diào)試
數(shù)據(jù)類需要類型提示,因此減少了 bug
一個(gè)data類的例子如下:

8、就地變量交換
一個(gè)簡(jiǎn)潔的技巧,可以節(jié)省幾行代碼:

9、字典合并(Python 3.5+)
從python 3.5開始,字典的合并變得更簡(jiǎn)單了:

10、將字符串轉(zhuǎn)化為標(biāo)題格式
在標(biāo)題格式中,非介詞的首字母會(huì)大寫??梢酝ㄟ^(guò).title()方法實(shí)現(xiàn):

11、將字符串分離并存儲(chǔ)到列表中
可以按任意字符來(lái)分割字符串,并存儲(chǔ)到列表中,例如按空格來(lái)分割字符串:

12、將列表中的字符串合并到一起
與上一條的功能正好相反,從列表中創(chuàng)建字符串,并在兩個(gè)單詞間插入空格:

也許你會(huì)疑惑,為什么不使用mylist.join(" ")呢?歸根結(jié)底,String.join()函數(shù)不僅可以連接列表,還可以連接任何可迭代的列表。將它放在String中會(huì)阻止在多個(gè)位置實(shí)現(xiàn)相同的功能。
13、Emoji
這些表情具有很強(qiáng)的表達(dá)能力,能給人留下深刻印象。更重要的是,這在分析社交媒體數(shù)據(jù)時(shí)尤其有用。首先通過(guò)以下命令安裝emoji模塊:
pip3 install emoji
可以按照以下方法使用表情:

14、列表切片操作
列表切片的基本語(yǔ)法是:
a[start:stop:step]
start,stop和step都是可選的(可填可不填),默認(rèn)值是:
start:0
stop:列表的末尾
step:1
一些例子如下:

15、翻轉(zhuǎn)字符串和列表
可以用切片操作來(lái)翻轉(zhuǎn)列表或字符串,將step設(shè)置為負(fù)值即可實(shí)現(xiàn):

16、圖片顯示
可以通過(guò)Pillow模塊來(lái)顯示圖片,例如顯示Kitty小貓,首先安裝python圖片庫(kù):
pip3 install Pillow
然后下載你要顯示的圖片,并重命名。然后可以通過(guò)以下命令來(lái)顯示圖片:

或者也可以直接通過(guò)IPython來(lái)顯示:

Pillow的功能遠(yuǎn)不止顯示圖片。它可以對(duì)圖片進(jìn)行分析,調(diào)整大小,濾波,增強(qiáng),變形等等。
17、使用map()函數(shù)
Python的一個(gè)內(nèi)建函數(shù)是 map()。map()的基本語(yǔ)法是:
map(function, something_iterable)
傳入的參數(shù)是一個(gè)函數(shù),和一個(gè)需要執(zhí)行的對(duì)象,可以是任何可迭代對(duì)象。在下面的例子中使用的是list:

map()是一個(gè)代替循環(huán)的好方式,可以在你的代碼中嘗試使用map()函數(shù)。
18、從列表或字符串中獲取唯一元素
通過(guò)set()函數(shù)可以將列表或字符串轉(zhuǎn)換為集合,集合中的不含重復(fù)元素:

19、找出最常出現(xiàn)的值
查找列表或字符串中最常出現(xiàn)的值:

你可以嘗試自行理解上述代碼。好吧,也許你并沒(méi)有嘗試。上述代碼的工作原理如下:
max()將返回列表中的最大值。key參數(shù)接受單個(gè)參數(shù)函數(shù)確定定制排序順序,在本例中,它是test.count,該函數(shù)應(yīng)用于iterable對(duì)象中的每個(gè)元素。
.count()是列表的一個(gè)內(nèi)建函數(shù),該函數(shù)接收一個(gè)參數(shù),并計(jì)算該參數(shù)的出現(xiàn)次數(shù)。因此在本例中,test.count(1)返回2,testcount(4)返回4。
set(test)返回test列表中的所有唯一值,因此是{1,2,3,4}。
因此在上面的這行語(yǔ)句中我們首先找出了test列表的所有獨(dú)特值,即{1,2,3,4}。接著,將.count函數(shù)應(yīng)用于set中的每個(gè)值,得到一個(gè)數(shù)量列表,然后通過(guò)max找出數(shù)量最大的值。
20、創(chuàng)建進(jìn)度條
可以自行創(chuàng)建進(jìn)度條,但也可以通過(guò)progress模塊來(lái)快速創(chuàng)建:
pip3 install progress
然后通過(guò)以下代碼來(lái)創(chuàng)建進(jìn)度條:

效果如下:

21、在交互式shell中使用用 _ 來(lái)獲取上一個(gè)表達(dá)式的運(yùn)行結(jié)果可以使用下劃線操作符來(lái)獲取最后運(yùn)行的表達(dá)式的輸出,在IPython中操作如下:

這種方法在python shell中也是適用的,IPython還可以通過(guò)Out[n]來(lái)獲取任意第n個(gè)表達(dá)式的輸出結(jié)果。
22、快速創(chuàng)建web服務(wù)器
您可以快速啟動(dòng)web服務(wù)器,來(lái)提供當(dāng)前工作目錄的內(nèi)容:
python3-mhttp.server
如果您想與同事共享一些內(nèi)容,或者想測(cè)試一個(gè)簡(jiǎn)單的HTML站點(diǎn),這是非常有用的。
23、多行字符串
雖然可以使用三重引號(hào)在代碼中包含多行字符串,但這并不理想。在三重引號(hào)之間的所有內(nèi)容都變成字符串,包括格式。相比我更喜歡第二種方式,它將多行連接在一起,允許你很好地格式化代碼。惟一的缺點(diǎn)是需要顯式地放入新行:

24、用于條件賦值的三元運(yùn)算符這是另一種使你代碼變得簡(jiǎn)潔,同時(shí)保持可讀性的方法:
[on_true]if[expression]else[on_false]
一個(gè)簡(jiǎn)單的例子如下:
x ="Success!"if(y == 2)else"Failed!"
25、統(tǒng)計(jì)元素的出現(xiàn)次數(shù)
可以使用Collections依賴包中的Counter方法來(lái)獲得一個(gè)包含列表中所有惟一元素計(jì)數(shù)的字典:

26、比較運(yùn)算符的連接可以在python中鏈接比較運(yùn)算符,從而使代碼更簡(jiǎn)潔,可讀性更強(qiáng):

27、加入色彩

通過(guò) Colorama 依賴包,可以在終端中添加更多色彩:

28、日期處理
python-dateutil模塊為標(biāo)準(zhǔn)的datetime模塊提供了強(qiáng)大的擴(kuò)展。首先安裝該模塊:
pip3 install python-dateutil
你可以用這個(gè)庫(kù)做很多很酷的事情。我講把我認(rèn)為特別有用的一個(gè)功能作為示例:日志文件中日期的模糊解析等。如下:

只要記住,如果datatime不具備某個(gè)功能,那datautil一定有該功能,datautil是datatime功能的延續(xù)。
29、整除
在Python 2中,除法運(yùn)算符(/)默認(rèn)為整數(shù)除法,除非其中一個(gè)操作數(shù)是浮點(diǎn)數(shù)。如下:

在python3中,除法運(yùn)算符/默認(rèn)為浮點(diǎn)除法,//運(yùn)算符變成了整數(shù)除法。所以有:

30、通過(guò)chardet檢測(cè)字符集合
可以使用chardet模塊來(lái)檢測(cè)文件中的字符集合。這在分析大量隨機(jī)文本時(shí)非常有用。安裝chardet模塊:
pip install chardet
現(xiàn)在你有了一個(gè)額外的命令行工具chardetect,它可以這樣使用:

你也可以通過(guò)編程的方式來(lái)使用這個(gè)依賴包,以上就是30個(gè)python的技巧,希望這些技巧能幫助你在新的一年里有個(gè)不錯(cuò)的開始。
很多小伙伴在學(xué)習(xí)Python的過(guò)程中往往因?yàn)闆](méi)有資料或者沒(méi)人指導(dǎo)從而導(dǎo)致自己不想學(xué)下去了,因此我特意準(zhǔn)備了大量的PDF書籍、視頻教程,都免費(fèi)送給大家!不管你是零基礎(chǔ)還是有基礎(chǔ)都可以獲取到自己相對(duì)應(yīng)的學(xué)習(xí)禮包!包括Python軟件工具和2019最新入門到實(shí)戰(zhàn)教程,(https://url.cn/59RWE1Z)復(fù)制到瀏覽器打開!