Python 三十個(gè)實(shí)踐、建議和技巧

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市辐怕,隨后出現(xiàn)的幾起案子逼蒙,更是在濱河造成了極大的恐慌,老刑警劉巖秘蛇,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件其做,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡赁还,警方通過(guò)查閱死者的電腦和手機(jī)妖泄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)艘策,“玉大人蹈胡,你說(shuō)我怎么就攤上這事∨竽瑁” “怎么了罚渐?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)驯妄。 經(jīng)常有香客問(wèn)我荷并,道長(zhǎng),這世上最難降的妖魔是什么青扔? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任源织,我火速辦了婚禮翩伪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谈息。我一直安慰自己缘屹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布侠仇。 她就那樣靜靜地躺著轻姿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪逻炊。 梳的紋絲不亂的頭發(fā)上互亮,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音嗅骄,去河邊找鬼胳挎。 笑死饼疙,一個(gè)胖子當(dāng)著我的面吹牛溺森,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播窑眯,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼屏积,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了磅甩?” 一聲冷哼從身側(cè)響起炊林,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎卷要,沒(méi)想到半個(gè)月后渣聚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡僧叉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年奕枝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瓶堕。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡隘道,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出郎笆,到底是詐尸還是另有隱情谭梗,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布宛蚓,位于F島的核電站激捏,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏凄吏。R本人自食惡果不足惜远舅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一壹置、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧表谊,春花似錦钞护、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至距辆,卻和暖如春余佃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背跨算。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工爆土, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人诸蚕。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓步势,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親背犯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子坏瘩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容