【導(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ù)制到瀏覽器打開泰涂!