Python 三十大實踐、建議和技巧

2021-01-10 AI科技大本營

所有參與投票的 CSDN 用戶都參加抽獎活動

群內公布獎項,還有更多福利贈送

作者 | Erik-Jan van Baaren

譯者 | 凱隱

編輯 | Jane

出品 | AI科技大本營(ID:rgznai100)

【導讀】2020年,你又立了什麼新的 Flag?新一年,我們先為大家準備 30 個非常優秀的 Python 實踐技巧。希望這些訣竅能在實際工作中幫助大家,並且學到一些有用的知識。

1、使用 python 3

由於官方從2020年1月1日起就停止了對python2.7的更新支持,因此本教程的大部分例子都只能在python 3環境下運行。如果你仍然在使用2.7版本,請先升級到python 3。

2、檢查並使用滿足需求的最小python版本

你可以在代碼中檢查Python 版本,以確保你的代碼使用者沒有使用不兼容的版本運行腳本。使用以下代碼進行簡單的檢查:

if not sys.version_info > (2, 7): # berate your user for running a 10 year # python versionelif not sys.version_info >= (3, 5): # Kindly tell your user (s)he needs to upgrade # because you're using 3.5 features3、使用IPython

IPython 基本上是一個增強的shell,僅僅是為了自動補全功能,IPython也是值得使用的,但其實它還有更多作用,包括內建的Magic命令,這裡列舉了一些:

%cd:改變當前的工作目錄%edit:打開編輯器並在關閉編輯器後執行鍵入的代碼%env:顯示當前的環境變量%pip:install [pkgs] 在不離開交互式shell的情況下安裝功能包%time 和 %timeit:類似於python中的time模塊,可以為代碼運行計時完整的命令列表參見:

https://ipython.readthedocs.io/en/stable/interactive/magics.html

IPython的另一個有用功能是可以使用之前任意一行代碼的輸出,代碼的輸入和輸入實際上都是對象,例如可以通過 Out[3] 來使用第三次運行代碼的輸出對象。

安裝IPython的指令是:

pip3 install ipython4.列表解析式

列表解析式可以用來替換通過loop來填充列表的醜陋方法,其基本語法是:

[ expression for item in list if conditional ]一個非常基礎的例子,用於生成包含連續數字的列表:

mylist = [i for i in range(10)]print(mylist)# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]由於可以使用表達式,因此可以通過更複雜的數學方法來生成列表:

squares = [x**2 for x in range(10)]print(squares)# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]甚至也可以調用外部函數:

def some_function(a): return (a + 5) / 2my_formula = [some_function(i) for i in range(10)]print(my_formula)# [2, 3, 3, 4, 4, 5, 5, 6, 6, 7]最後,也可以用if作為生成條件來對列表進行過濾。在下面的例子中,只有偶數被保留:

filtered = [i for i in range(20) if i%2==0]print(filtered)# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]5、檢查對象的內存佔用情況

通過sys.getsizeof(object)命令可以查看任何對象的內存使用情況:

import sysmylist = range(0, 10000)print(sys.getsizeof(mylist))# 48這是因為range函數返回的是一個類對象,這個類對象表現為一個列表。因此使用range函數比使用實際的包含一萬個數字的列表要更加節省內存。

可以通過上面第四條中提到的列表解析式創建一個同樣大小的實際列表:

import sysmyreallist = [x for x in range(0, 10000)]print(sys.getsizeof(myreallist))# 87632實際內存佔用87632位元組,遠高於通過range函數生成的對象。

6、返回多個值

Pyhon中的函數都可以返回多個變量,而不需要字典,列表或者類作為返回對象。方法如下:

def get_user(id): # fetch user from database # .... return name, birthdatename, birthdate = get_user(4)對於有限數量的返回值,這是可以的。但是任何超過3個值的內容都應該放到一個(data)類中。

7、使用 data 類

從3.7版本開始,python提供了 data 類。與常規類或其他替代方法(如返回多個值或字典)相比,有以下幾個優點:

數據類需要至少一定數量的代碼可以通過 __eq__ 方法來比較不同的data類對象可以 __repr__ 通過很容易地列印一個數據類來進行調試數據類需要類型提示,因此減少了 bug一個data類的例子如下:

from dataclasses import dataclass@dataclassclass Card: rank: str suit: strcard = Card("Q", "hearts")print(card == card)# Trueprint(card.rank)# 'Q'print(card)Card(rank='Q', suit='hearts')詳細教程參見:

https://realpython.com/python-data-classes/

8、就地變量交換

一個簡潔的技巧,可以節省幾行代碼:

a = 1b = 2a, b = b, aprint (a)# 2print (b)# 19、字典合併(Python 3.5+)

從python 3.5開始,字典的合併變得更簡單了:

dict1 = { 'a': 1, 'b': 2 }dict2 = { 'b': 3, 'c': 4 }merged = { **dict1, **dict2 }print (merged)# {'a': 1, 'b': 3, 'c': 4}10、將字符串轉化為標題格式

在標題格式中,非介詞的首字母會大寫。可以通過.title方法實現:

mystring = "10 awesome python tricks"print(mystring.title)'10 Awesome Python Tricks'11、將字符串分離並存儲到列表中

可以按任意字符來分割字符串,並存儲到列表中,例如按空格來分割字符串:

mystring = "The quick brown fox"mylist = mystring.split(' ')print(mylist)# ['The', 'quick', 'brown', 'fox']12、將列表中的字符串合併到一起

與上一條的功能正好相反,從列表中創建字符串,並在兩個單詞間插入空格:

mylist = ['The', 'quick', 'brown', 'fox']mystring = " ".join(mylist)print(mystring)# 'The quick brown fox'也許你會疑惑,為什麼不使用mylist.join(" ")呢?歸根結底,String.join函數不僅可以連接列表,還可以連接任何可迭代的列表。將它放在String中會阻止在多個位置實現相同的功能。

13、Emoji

這些表情具有很強的表達能力,能給人留下深刻印象。更重要的是,這在分析社交媒體數據時尤其有用。

首先通過以下命令安裝emoji模塊:

pip3 install emoji可以按照以下方法使用表情:

import emojiresult = emoji.emojize('Python is :thumbs_up:')print(result)# 'Python is '# You can also reverse this:result = emoji.demojize('Python is ')print(result)# 'Python is :thumbs_up:'更多複雜的例子以及文檔,參見:

https://pypi.org/project/emoji/

14、列表切片操作

列表切片的基本語法是:

a[start:stop:step]start,stop和step都是可選的(可填可不填),默認值是:

start:0stop:列表的末尾step:1一些例子如下:

# We can easily create a new list from # the first two elements of a list:first_two = [1, 2, 3, 4, 5][0:2]print(first_two)# [1, 2]# And if we use a step value of 2, # we can skip over every second number# like this:steps = [1, 2, 3, 4, 5][0:5:2]print(steps)# [1, 3, 5]# This works on strings too. In Python,# you can treat a string like a list of# letters:mystring = "abcdefdn nimt"[::2]print(mystring)# 'aced it'15、翻轉字符串和列表

可以用切片操作來翻轉列表或字符串,將step設置為負值即可實現:

revstring = "abcdefg"[::-1]print(revstring)# 'gfedcba'revarray = [1, 2, 3, 4, 5][::-1]print(revarray)# [5, 4, 3, 2, 1]16、圖片顯示

可以通過Pillow模塊來顯示圖片,例如顯示Kitty小貓,首先安裝python圖片庫:

pip3 install Pillow然後下載你要顯示的圖片,並重命名。然後可以通過以下命令來顯示圖片:

from PIL import Imageim = Image.open("kittens.jpg")im.showprint(im.format, im.size, im.mode)# JPEG (1920, 1357) RGB或者也可以直接通過IPython來顯示:

Pillow的功能遠不止顯示圖片。它可以對圖片進行分析,調整大小,濾波,增強,變形等等。更多資料詳見文檔:

https://pillow.readthedocs.io/en/stable/。

17、使用map函數

Python的一個內建函數是 map。map的基本語法是:

map(function, something_iterable)傳入的參數是一個函數,和一個需要執行的對象,可以是任何可迭代對象。在下面的例子中使用的是list:

def upper(s): return s.uppermylist = list(map(upper, ['sentence', 'fragment']))print(mylist)# ['SENTENCE', 'FRAGMENT']# Convert a string representation of# a number into a list of ints.list_of_ints = list(map(int, "1234567")))print(list_of_ints)# [1, 2, 3, 4, 5, 6, 7]map是一個代替循環的好方式,可以在你的代碼中嘗試使用map函數。

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

通過set函數可以將列表或字符串轉換為集合,集合中的不含重複元素:

mylist = [1, 1, 2, 3, 4, 5, 5, 5, 6, 6]print (set(mylist))# {1, 2, 3, 4, 5, 6}# And since a string can be treated like a # list of letters, you can also get the # unique letters from a string this way:print (set("aaabbbcccdddeeefff"))# {'a', 'b', 'c', 'd', 'e', 'f'}19、找出最常出現的值

查找列表或字符串中最常出現的值:

test = [1, 2, 3, 4, 2, 2, 3, 1, 4, 4, 4]print(max(set(test), key = test.count))# 4你可以嘗試自行理解上述代碼。

好吧,也許你並沒有嘗試。上述代碼的工作原理如下:

max將返回列表中的最大值。key參數接受單個參數函數確定定製排序順序,在本例中,它是test.count,該函數應用於iterable對象中的每個元素。.count是列表的一個內建函數,該函數接收一個參數,並計算該參數的出現次數。因此在本例中,test.count(1)返回2,testcount(4)返回4。set(test)返回test列表中的所有唯一值,因此是{1,2,3,4}。因此在上面的這行語句中我們首先找出了test列表的所有獨特值,即{1,2,3,4}。接著,將.count函數應用於set中的每個值,得到一個數量列表,然後通過max找出數量最大的值。

20、創建進度條

可以自行創建進度條,但也可以通過progress模塊來快速創建:

pip3 install progress然後通過以下代碼來創建進度條:

from progress.bar import Barbar = Bar('Processing', max=20)for i in range(20): # Do some work bar.nextbar.finish效果如下:

21、在交互式shell中使用用 _ 來獲取上一個表達式的運行結果

可以使用下劃線操作符來獲取最後運行的表達式的輸出,在IPython中操作如下:

In [1]: 3 * 3Out[1]: 9In [2]: _ + 3Out[2]: 12這種方法在python shell中也是適用的,IPython還可以通過Out[n]來獲取任意第n個表達式的輸出結果。

22、快速創建web伺服器

您可以快速啟動web伺服器,來提供當前工作目錄的內容:

python3 -m http.server如果您想與同事共享一些內容,或者想測試一個簡單的HTML站點,這是非常有用的。

23、多行字符串

雖然可以使用三重引號在代碼中包含多行字符串,但這並不理想。在三重引號之間的所有內容都變成字符串,包括格式。相比我更喜歡第二種方式,它將多行連接在一起,允許你很好地格式化代碼。惟一的缺點是需要顯式地放入新行:

s1 = """Multi line strings can be put between triple quotes. It's not ideal when formatting your code though"""print (s1)# Multi line strings can be put# between triple quotes. It's not ideal# when formatting your code thoughs2 = ("You can also concatenate multiple\n" +"strings this way, but you'll have to\n""explicitly put in the newlines")print(s2)# You can also concatenate multiple# strings this way, but you'll have to# explicitly put in the newlines24、用於條件賦值的三元運算符

這是另一種使你代碼變得簡潔,同時保持可讀性的方法:

[on_true] if [expression] else [on_false]一個簡單的例子如下:

x = "Success!" if (y == 2) else "Failed!"25、統計元素的出現次數

可以使用Collections依賴包中的Counter方法來獲得一個包含列表中所有惟一元素計數的字典:

from collections import Countermylist = [1, 1, 2, 3, 4, 5, 5, 5, 6, 6]c = Counter(mylist)print(c)# Counter({1: 2, 2: 1, 3: 1, 4: 1, 5: 3, 6: 2})# And it works on strings too:print(Counter("aaaaabbbbbccccc"))# Counter({'a': 5, 'b': 5, 'c': 5})26、比較運算符的連接

可以在python中連結比較運算符,從而使代碼更簡潔,可讀性更強:

x = 10# Instead of:if x > 5 and x < 15:print("Yes")# yes# You can also write:if 5 < x < 15:print("Yes")# Yes27、加入色彩

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

from colorama import Fore, Back, Styleprint(Fore.RED + 'some red text')print(Back.GREEN + 'and with a green background')print(Style.DIM + 'and in dim text')print(Style.RESET_ALL)print('back to normal now')關於Colorama依賴包的更多信息,參見:

https://pypi.org/project/colorama/

28、日期處理

python-dateutil模塊為標準的datetime模塊提供了強大的擴展。首先安裝該模塊:

pip3 install python-dateutil 你可以用這個庫做很多很酷的事情。我講把我認為特別有用的一個功能作為示例:日誌文件中日期的模糊解析等。如下:

from dateutil.parser import parselogline = 'INFO 2020-01-01T00:00:01 Happy new year, human.'timestamp = parse(log_line, fuzzy=True)print(timestamp)# 2020-01-01 00:00:01隻要記住,如果datatime不具備某個功能,那datautil一定有該功能,datautil是datatime功能的延續。

29、整除

在Python 2中,除法運算符(/)默認為整數除法,除非其中一個操作數是浮點數。如下:

# Python 25 / 2 = 25 / 2.0 = 2.5在python3中,除法運算符/默認為浮點除法,//運算符變成了整數除法。所以有:

Python 35 / 2 = 2.55 // 2 = 2對於這種變化背後的完整動機,可以閱讀PEP-0238:

https://www.python.org/dev/peps/pep-0238/

30、通過chardet檢測字符集合

可以使用chardet模塊來檢測文件中的字符集合。這在分析大量隨機文本時非常有用。安裝chardet模塊:

pip install chardet現在你有了一個額外的命令行工具chardetect,它可以這樣使用:

chardetect somefile.txtsomefile.txt: ascii with confidence 1.0你也可以通過編程的方式來使用這個依賴包,詳見技術文檔:

https://chardet.readthedocs.io/en/latest/usage.html

以上就是30個python的技巧,希望這些技巧能幫助你在新的一年裡有個不錯的開始。

所有CSDN 用戶都可參與投票活動

加入福利群,每周還有精選學習資料、技術圖書等福利發送

點擊投票頁面「講師頭像」,60+公開課免費學習

相關焦點

  • 如何自學成 Python 大神?這裡有些建議
    雖然教程和書籍從多個角度提供不同的編程教學,讓你可以深入了解該語言的特性,但實際的上手編程讓大家有了一種更加有趣且更具挑戰性的通道來學習不同的編程技巧、數據結構和第三方庫,從而解決不同的編程問題。 實踐創建自己的項目,或加入開源社區( https://coolpythoncodes.com/julien-danjou )和 Github,這些都是編程的必經之路。對於像 Python 這樣的語言來說更是如此,如今開發者社區正以驚人的速度增長,每天都有新的庫和項目在快速更新。
  • Python2 已終結,入手Python 3,你需要這30個技巧
    機器之心選自medium作者:Erik-Jan van Baaren機器之心編譯參與:王子嘉、一鳴Python2 在今年和我們說拜拜了,Python3 有哪些有趣而又實用的技巧呢
  • 機器學習、深度學習算法原理與案例實踐暨Python大數據綜合應用...
    原標題:機器學習、深度學習算法原理與案例實踐暨Python大數據綜合應用高級研修班通信和信息技術創新人才培養工程項目辦公室 通人辦〔2018〕 第5號 機器學習、深度學習算法原理與案例實踐暨Python
  • Python學習第112課——numpy中數組查找元素和改變元素的小技巧
    【每天幾分鐘,從零入門python編程的世界!】上節我們學習了如何利用index找到ndarray數組中的一些元素,並把找到的元素生成一個新的ndarray。代碼如下:現在我們學習幾個用index找到ndarray中元素的小技巧。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    教程大合集,包含python所有就業方向,每套課程均來自市面上主流培訓機構的原版教程,價值都在數百元以上 每套課程均包含:視頻課程+課件+原始碼 重要:建議根據自己工作方向和需求,重點選擇2到3套課程學精,吃透,然後在工作 重要:零基礎小白建議先選擇零基礎全能篇的一套課程學精,然後再根據自 己的需求和規劃選擇學習其他方向課程,學完後一定要多實踐
  • 常用的十大 python 圖像處理工具
    作者 | Parul Pandey翻譯 | 安其羅喬爾、JimmyHua 編輯 | 王立魚原文連結:https://towardsdatascience.com/image-manipulation-tools-for-python-6eb0908ed61f
  • python編程從入門到實踐:讀取整個文件和創建包含文件各行的內容
    1.python學習筆記:在文件編輯器中新建一個文件,寫幾句話來總結一下你至此學到的Python知識,其中每一行都以「In python you can」打頭。將這個文件命名為learning_python.txt,並將其存儲到為完成本章練習而編寫的程序所在的目錄中。
  • 十大Python開發技巧
    這裡有十個精巧的Python開發技巧,我敢肯定您從未見過。 快速瀏覽其中一些功能,以及每個功能的概要。注意:代碼在此故事中顯示為圖像。 此外,您將在最後獲得GitHub Readme連結,以進一步進行實驗。
  • 入門Python,這些JupyterNotebook技巧就是你必須學的
    此系列文章收錄在公眾號(建議按順序閱讀本系列文章) : 數據大宇宙 > Python > 工具轉發本文並私信我"python",即可獲得Python資料以及更多系列文章(持續更新的)Python數據人你竟然不會用JupyterNotebook!
  • 實踐經驗|Python加速運行技巧 - 酷扯兒
    個人主頁:https://haomood.github.io/homepage/Python 是一種腳本語言,相比 C/C++ 這樣的編譯語言,在效率和性能方面存在一些不足。但是,有很多時候,Python 的效率並沒有想像中的那麼誇張。本文對一些 Python 代碼加速運行的技巧進行整理。
  • python編程30個常用技巧
    打開APP python編程30個常用技巧 深度學習這件小事 發表於 2020-12-24 15:07:51 1、冒泡排序
  • 數據分析從業者必看,10 個加速 python 數據分析的簡單的小技巧
    數據科學愛好者 Parul Pandey 在近日發表了一篇博文,分享了在數據科學中非常實用的 10 個小技巧。雷鋒網 AI 科技評論將他的文章編譯整理如下。有時候,一點小小的黑客行為可以節省時間,挽救生命。一個小小的快捷方式或附加組件有時會被證明是天賜之物,並且可以真正提高生產力。所以,下面是我最喜歡的一些技巧,我以本文的形式一起使用和編譯它們。
  • 算法應用|機器學習python應用,簡單機器學習項目實踐
    上一篇文章中介紹了機器學習的簡單知識,還有python中進行機器學習實踐需要的生態環境,接下來將會通過鳶尾花分類這個例子對機器學習做一個簡要的介紹。通過一步一步地實現這個項目來介紹以下內容。導入和使用python中機器學習的各個方面的類庫。導入數據,並通過描述性分析、可視化等對數據進行分析。創建六個模型,並從中選擇準確度最高的模型。
  • 中科大統計學python_python 中科大 - CSDN
    另外,對於已經入門了的同學們, 這門課程也是一個提升自己應用機器學習的好地方, 因為裡面同時也介紹了很多種機器學習的技巧方法, 能大大幫助提升學習效果。整個課程共分為基礎課程和高階課程兩大部分,主要面向大三、大四或研一的學生,參加課程的學生需要具備相關背景知識,包括線性代數、概率論、機器學習(數據挖掘、模式識別、深度學習)等。此外,由於該課程有不少實踐內容,所以參加課程的同學最好有一些編程經驗,會用 Python、PyTorch。
  • python編程從入門到實踐:使用文件的內容
    讀取你剛創建的文件learning_python.txt中的每一行,將其中的Python都替換為另一門語言的名稱,如C。將修改後的每行都列印到屏幕上。learning_python.txt中的內容為In Python you can broaden your horizons.In Python you can get joy beyond learning.
  • Python開發簡單爬蟲【學習資料總結】
    將URL存放在關係型數據中 將URL存儲在緩存資料庫中 三、網頁下載器和urllib2模塊 網頁下載器類似於瀏覽器,會將網際網路對應的網頁以HTML的形式下載到本地,存儲成本地文件或內存字符串,然後進行後續的分析。
  • python海量數據快速查詢的技巧
     對象序列化對象序列化就是將python中的對象保存為二進位的字節流文件,與之相對的是反序列化, 從二進位文件中讀取內容,重新解析為python對象。通過序列化,只需要讀取一次資料庫,然後將生存的字典對象保存為一個文件,後續在使用時,直接讀取序列化產生的文件,就可以快速得到資料庫對應的字典。
  • Python還能火多久?
    Web服務是指可以利用Python實現開發網頁的功能,這個方向也是當前各種程式語言在就業方面需求最大的一個方向,在這個方向上Flask和Django是python的好搭檔。2學霸建議——如何學習python並運用呢?① 閱讀文檔式通過查看官方的一些文檔,或者是別人寫好的一些按知識點整理的文檔。
  • 廣州Python測試培訓
    立即諮詢 04 框架與項目 教學目標:1、掌握python常用框架的使用能力;2、快速上手大型網站架構能力;3、掌握網站優化的技巧。
  • 如何系統學習Python?這三個坑千萬別踩!
    軟體安好了第一步也就邁出來了,今天我想跟大家分享一下如何系統的以及高效率地去學習Python這門課程,還有一些避雷建議,老母親真是為你們操碎了心,我走過的彎路你們就別去走了,一定要耐心看完喲~ 首先,開啟任何一項技能學習的大門,都要調整好自己的心態,充足的準備以及堅持下去的決心。