玩轉Python? 一文總結30種Python的竅門和技巧

Python作為2019年必備語言之一爆安,展現(xiàn)了不可替代作用叛复。對于所有的數(shù)據(jù)科學工作者,如何提高使用Python的效率扔仓,這里褐奥,總結了30種Python的最佳實踐、技巧和竅門翘簇。希望這些可以幫助大家在新的一年提高工作的效率撬码,并且在此過程中學習到一些有用的東西。

1. 使用Python 3

Python官方宣布:從2020年1月1日起版保,正式不支持Python 2呜笑。本文有一堆的例子,只能在Python 3工作彻犁。如果你的版本還是Python 2.7版叫胁,趕緊升級到Python 3.x吧。

2.檢查所需的最低Python版本

大家可以在代碼中檢查Python版本汞幢,以確保沒有使用不兼容的版本運行腳本驼鹅。使用以下簡單檢查:

importsys# 檢查python版本,如果是低于3.5就退出程序defcheck_version():v = sys.version_info# print(v)? # sys.version_info(major=3, minor=6, micro=5, releaselevel='final', serial=0)ifv.major ==3andv.minor >=5:returnprint('Your current python is %d.%d. Please use Python 3.6.'% (v.major, v.minor))? ? exit(1)

3.使用IPython

IPython是一個增強的shell工具森篷∈涔常可以進行代碼自動補全,其實還有很多命令仲智,我也喜歡內置的所有magic命令买乃。比如:

%cd —更改當前工作目錄

%edit —打開編輯器并在關閉編輯器后執(zhí)行鍵入的代碼

%env —顯示當前環(huán)境變量

%pip install [pkgs] —在不離開交互式shell的情況下安裝軟件包

%time和%timeit—定時執(zhí)行Python代碼

另一個有用的功能是引用先前命令的輸出。輸入和輸出是實際對象钓辆。你可以通過使用Out[3]來使用第三個命令的輸出为牍。

使用以下命令安裝IPython:

pip3 install ipython

4.列表(list)理解

列表(list)理解可以代替丑陋的for循環(huán)來填充列表。列表理解的基本語法為:[ expression for item in list if conditional ]

一個非常簡單的示例岩馍,用數(shù)字序列填充列表:

[i for i in range(10)]

并且因為可以使用表達式碉咆,所以還可以進行一些數(shù)學運算,甚至調用外部函數(shù)。

最后蛀恩,你可以使用if篩選列表疫铜。在這種情況下,我們僅保留可被2整除的值:

[i for i in range(10) if i%2==0]

5.檢查對象的內存使用情況

使用sys.getsizeof()双谆,你可以檢查對象的內存使用情況壳咕。

6.返回多個值

Python中的函數(shù)可以返回多個變量席揽,而無需字典,列表或類谓厘。

對于有限數(shù)量的返回值幌羞,這是可以的。但是超過3個值的任何內容都應放入類中竟稳。

7.使用data類

從Python 3.7版開始属桦,Python提供data類。與常規(guī)類或其他替代方法(如返回多個值或字典)相比他爸,它具有多個優(yōu)點:

數(shù)據(jù)類需要最少的代碼

你可以比較data類聂宾,因為它__eq__已為您實現(xiàn)

你也可以輕松打印數(shù)據(jù)類以進行調試,因為它__repr__也已實現(xiàn)

data類需要類型提示诊笤,從而減少了發(fā)生錯誤的機會

8.就地變量交換

一項巧妙的小技巧系谐,可以節(jié)省幾行代碼。

a,b = b,a

9.合并字典(Python 3.5+)

從Python 3.5開始讨跟,合并字典變得更加容易:

如果鍵(key)重疊纪他,則第一個詞典中的鍵(key)將被覆蓋。

10.首字母大小寫

使用capitalize()函數(shù)將字符串的首字母轉為大寫晾匠,其余變?yōu)樾憽?/p>

"welcome".capitalize()

11.將字符串拆分為列表

你可以將字符串拆分為字符串列表茶袒。在這種情況下,我們分割空格字符:

list("welcome")

12.從字符串列表創(chuàng)建一個字符串

反之亦然混聊,從上一個技巧開始弹谁,從列表中創(chuàng)建一個字符串乾巧,并在每個單詞之間添加一個空格字符:

" ".join(['2','0','2','0'])

13.表情符號

這將使人印象深刻或被排斥句喜,這取決于誰在尋找。更嚴重的是沟于,這可以派上用場咳胃,尤其是在分析社交媒體數(shù)據(jù)時。

首先旷太,安裝表情符號模塊:

pip3 install emoji

安裝此程序后展懈,您可以執(zhí)行以下操作:

訪問emoji庫頁面(https://pypi.org/project/emoji/)以獲取更多示例和文檔。

14.列表(list)切片

列表切片的基本語法是:a[start:stop:step]

start供璧,stop和step是可選的存崖。如果不填寫,則默認為:

0為 start

字符串的結尾 end

step默認為1

這里有些例子:

a=[0,1,2,3,4,5,6,7,8,9]a[2:5:2]

15.反轉字符串和列表

你可以從上方使用切片符號來反轉字符串或列表睡毒。通過使用step=-1来惧,將元素反轉:

a[::-1]

16.展示小貓

我終于找到了一個很好的借口,可以在其中一篇文章中展示小貓了演顾!但是供搀,可能會使用它來顯示圖形等隅居。首先,安裝Pillow(

https://pypi.org/project/Pillow/)葛虐,它是Python圖像庫的一個分支:

pip3 install Pillow

現(xiàn)在胎源,將該圖像下載到一個名為“ kitchess.jpg”的文件中:

你可以直接從IPython進行操作:

Pillow不僅可以顯示圖像,還可以做更多的事情屿脐。它可以分析涕蚤,調整大小,過濾摄悯,增強赞季,變形等。有關所有功能奢驯,請參閱文檔(

https://pillow.readthedocs.io/en/stable/)申钩。

17.使用map()

Python的內置函數(shù)之一稱為map()。map()的語法為:

map(function, something_iterable)

因此瘪阁,你給它提供了要執(zhí)行的功能以及要執(zhí)行的某些功能撒遣。這可以是任何可迭代的事情。在下面的示例中管跺,我將使用一個列表a=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]义黎。

list(map(lambda x: x+1,a))

看一下自己的代碼,看看是否可以map()在某處使用而不是循環(huán)豁跑!

18.從列表或字符串中獲取唯一元素

通過使用set()函數(shù)創(chuàng)建一個集合廉涕,你可以從列表或類似列表的對象中a=[1,1,2,3,4,4]獲取所有唯一元素。

set(a)

19.查找最常出現(xiàn)的值

要在列表或字符串中查找最頻繁出現(xiàn)的值:

test=[1,1,2,3,4,4,4,4]

您知道這為何有效嗎艇拍?在繼續(xù)閱讀之前狐蜕,請先自己弄清楚。您沒有嘗試卸夕,對嗎层释?無論如何,我會告訴你:

max()將返回列表中的最大值快集。該key參數(shù)采用單個參數(shù)函數(shù)來自定義排序順序贡羔,在本例中為test.count。該函數(shù)應用于迭代器上的每個項目个初。

test.count是list的內置函數(shù)乖寒。它接受一個參數(shù),并將計算該參數(shù)的出現(xiàn)次數(shù)院溺。因此test.count(1)將返回2楣嘁,test.count(4)返回4。

set(test) 返回測試的所有唯一值,因此{1马澈、2瓢省、3、4} 因此痊班,我們在單行代碼中所做的就是獲取test的所有唯一值勤婚,即{1, 2, 3, 4}。接下來涤伐,max將list.count函數(shù)應用到它們并返回最大值馒胆。

20.創(chuàng)建一個進度條

你可以創(chuàng)建自己的進度條,這很有趣凝果。但是使用進度包更快:

pip3 install progress

現(xiàn)在祝迂,你可以輕松創(chuàng)建進度條。

以下動畫演示了所有可用的進度類型(動畫顯示可查看官網(wǎng)):

21.在交互式shell使用_

你可以使用下劃線運算符獲取最后一個表達式的結果器净,例如在IPython中型雳,它看起來像:

In[1]: 3 * 3Out[1]: 9In[2]: _ + 3Out[2]: 12

這也可以在Python Shell中使用。此外山害,IPython shell允許使用Out[n]來獲得表達式在In [n]中的值例如纠俭,Out[1]在上面的示例中,_可以得到數(shù)字9浪慌。

22.快速創(chuàng)建Web服務器

你可以快速啟動Web服務器冤荆,以提供當前目錄的內容:

python3 -m http.server

如果你想與同事共享一些東西或想要測試一個簡單的HTML網(wǎng)站,這將很有用权纤。

23.多行字符串

盡管可以在代碼中使用三引號將多行字符串包括在內钓简,但這并不理想。放在三引號之間的所有內容都將成為字符串汹想,包括格式外邓,如下所示。我更喜歡第二種方法欧宜,該方法將多行連接在一起坐榆,可以很好地格式化代碼拴魄。唯一的缺點是你需要顯式添加換行符冗茸。

24.三元運算符,用于條件賦值

這是使代碼更簡潔同時又保持可讀性的另一種方法:

[on_true] if [expression] else [on_false]

舉個例子:

x="Success!"if (y ==2) else"Failed!"

25.計數(shù)

您可以使用集合庫中的Counter來獲取包含列表中所有唯一元素計數(shù)的字典:

fromcollectionsimportCountera=[1,1,2,3,4,4]Counter(a)

26.比較運算符的鏈接

您可以在Python中鏈接比較運算符匹中,以創(chuàng)建更易讀和簡潔的代碼:

27.添加一些顏色

使用Colorama(https://pypi.org/project/colorama/)夏漱,你可以為終端添加一些顏色。

28.處理日期

python-dateutil模塊(https://pypi.org/project/python-dateutil/)提供了對標準datetime模塊的強大擴展顶捷。通過以下方式安裝:

pip3 install python-dateutil

你可以用這個庫做很多很酷的事情挂绰。我將把示例限制在我認為特別有用的一個:日志文件中日期的模糊解析等。

只需記住:常規(guī)的Python日期時間功能在哪里結束葵蒂,python-dateutil就出現(xiàn)了交播!

29.整數(shù)除法

在Python 2中,除法運算符(/)默認為整數(shù)除法践付,除非操作數(shù)之一是浮點數(shù)秦士。因此,你有以下行為:

#Python25/2=25/2.0=2.5

在Python 3中永高,除法運算符默認為浮點除法隧土,并且//運算符已成為整數(shù)除法。這樣我們得到:

#Python 3 5/2 = 2.5 5 // 2 = 2

有關此更改背后的全部動機命爬,您應該閱讀PEP-0238(

https://www.python.org/dev/peps/pep-0238/)曹傀。

30.使用chardet進行字符集檢測

您可以使用chardet模塊來檢測文件的字符集。在分析大量隨機文本時,這很有用娃磺。安裝方式:

pip install chardet

現(xiàn)在你有了一個名為chardetect的額外命令行工具沪袭,它可以像這樣使用

chardetectsomefile.txtsomefile.txt:asciiwithconfidence1.0

你還可以通過編程方式使用該庫,請查閱docs(https://chardet.readthedocs.io/en/latest/usage.html)亥啦。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市练链,隨后出現(xiàn)的幾起案子翔脱,更是在濱河造成了極大的恐慌,老刑警劉巖媒鼓,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件届吁,死亡現(xiàn)場離奇詭異,居然都是意外死亡绿鸣,警方通過查閱死者的電腦和手機疚沐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來潮模,“玉大人亮蛔,你說我怎么就攤上這事∏嫦幔” “怎么了究流?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長动遭。 經常有香客問我芬探,道長,這世上最難降的妖魔是什么厘惦? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任偷仿,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘酝静。我一直安慰自己节榜,他們只是感情好,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布别智。 她就那樣靜靜地躺著全跨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪亿遂。 梳的紋絲不亂的頭發(fā)上浓若,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天,我揣著相機與錄音蛇数,去河邊找鬼挪钓。 笑死,一個胖子當著我的面吹牛耳舅,可吹牛的內容都是我干的碌上。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼浦徊,長吁一口氣:“原來是場噩夢啊……” “哼馏予!你這毒婦竟也來了?” 一聲冷哼從身側響起盔性,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤霞丧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后冕香,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛹尝,經...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年悉尾,在試婚紗的時候發(fā)現(xiàn)自己被綠了突那。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡构眯,死狀恐怖愕难,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情惫霸,我是刑警寧澤猫缭,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站它褪,受9級特大地震影響饵骨,放射性物質發(fā)生泄漏翘悉。R本人自食惡果不足惜茫打,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧老赤,春花似錦轮洋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至开财,卻和暖如春汉柒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背责鳍。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工碾褂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人历葛。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓正塌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親恤溶。 傳聞我的和親對象是個殘疾皇子乓诽,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355