首頁 後端開發 Python教學 Python開發的10個注意事項

Python開發的10個注意事項

Apr 29, 2017 pm 05:05 PM

  以下是十個Python中很有用的提示和技巧。其中一些是初學這門語言常常會犯的錯誤。

  注意:假設我們都用的是Python 3

#  1. 列表推導式

#   你有一個list:bag = [1, 2, 3, 4, 5]

  現在你想讓所有元素翻倍,讓它看起來是這個樣子:[2, 4, 6, 8, 10]

  大多是初學者,根據之前語言的經驗會大概這樣來做

bag = [1, 2, 3, 4, 5]  
for i in range(len(bag)):  
    bag[i] = bag[i] * 2
登入後複製

  但是有更好的方法:

bag = [elem * 2 for elem in bag]
登入後複製

  很簡潔對不對?這叫做Python的列表推導式。

  點選Trey Hunner’s tutorial查看更多關於清單推導式的介紹。

 2. 遍歷列表

#   繼續,還是上面的列表。

  如果可能盡量避免這樣做:

bag = [1, 2, 3, 4, 5]  
for i in range(len(bag)):  
    print(bag[i])
登入後複製

  取而代之的應該是這樣:

bag = [1, 2, 3, 4, 5]  
for i in bag:  
    print(i)
登入後複製

  如果x是一個列表,你可以對它的元素進行迭代。多數情況下你不需要各元素的索引,但如果你非要這樣做,那就用enumerate函數。它像下邊的樣子:

bag = [1, 2, 3, 4, 5]  
for index, element in enumerate(bag):  
    print(index, element)
登入後複製

  非常直觀明了。

 3. 元素互換

#   如果你是從java或C語言轉到Python來,可能會習慣於這樣:

a = 5  
b = 10

# 交换 a 和 b
tmp = a  
a = b  
b = tmp
登入後複製

  但Python提供了一個更自然更好的方法!

a = 5  
b = 10  
# 交换a 和 b
a, b = b, a
登入後複製

  夠漂亮吧?

 4. 初始化列表

#   假如你想要一個是10個整數0的列表,你可能會先想到:

bag = []  
for _ in range(10):  
    bag.append(0)
登入後複製

  換個方式吧:

bag = [0] * 10
登入後複製

  看,多優雅。

  注意:如果你列表包含了列表,這樣做會產生淺拷貝。

  舉例:

bag_of_bags = [[0]] * 5 # [[0], [0], [0], [0], [0]]  
bag_of_bags[0][0] = 1 # [[1], [1], [1], [1], [1]]
登入後複製

  Oops!所有的清單都改變了,而我們只是想要改變第一個清單。

  改一改啦:

bag_of_bags = [[0] for _ in range(5)]  
# [[0], [0], [0], [0], [0]]

bag_of_bags[0][0] = 1  
# [[1], [0], [0], [0], [0]]
登入後複製

  同時記住:

#

「過早優化是萬惡之源」
問問自己,初始化一個清單是必須的嗎?

#  5. 建構字串

#   你會經常需要列印字串。要是有很多變量,避免下面這樣:

name = "Raymond"  
age = 22  
born_in = "Oakland, CA"  
string = "Hello my name is " + name + "and I'm " + str(age) + " years old. I was born in " + born_in + "."  
print(string)
登入後複製

  額,這看起來多亂呀?你可以用個漂亮簡潔的方法來代替,.format。

  這樣做:

name = "Raymond"  
age = 22  
born_in = "Oakland, CA"  
string = "Hello my name is {0} and I'm {1} years old. I was born in {2}.".format(name, age, born_in) 
print(string)
登入後複製

  好多了!

 6. 返回tuples(元組)

  Python允許你在一個函數中傳回多個元素,這讓生活更簡單。但是在解包元組的時候出出線這樣的常見錯誤:

def binary():  
    return 0, 1

result = binary()  
zero = result[0]  
one = result[1]
登入後複製

  這是沒必要的,你完全可以換成這樣:

def binary():  
    return 0, 1

zero, one = binary()
登入後複製

  要是你需要所有的元素被返回,用個下劃線_:

zero, _ = binary()
登入後複製

  就是這麼高效率!

 7. 訪問Dicts(字典)

  你也會經常給dicts中寫入key,pair(鍵,值)。

  如果你試著存取一個不存在的於dict的key,可能會為了避免KeyError錯誤,你會傾向於這樣做:

countr = {}  
bag = [2, 3, 1, 2, 5, 6, 7, 9, 2, 7]  
for i in bag:  
    if i in countr:
        countr[i] += 1
    else:
        countr[i] = 1

for i in range(10):  
    if i in countr:
        print("Count of {}: {}".format(i, countr[i]))
    else:
        print("Count of {}: {}".format(i, 0))
登入後複製

  但是,用get()是個更好的辦法。

countr = {}  
bag = [2, 3, 1, 2, 5, 6, 7, 9, 2, 7]  
for i in bag:  
    countr[i] = countr.get(i, 0) + 1

for i in range(10):  
    print("Count of {}: {}".format(i, countr.get(i, 0)))
登入後複製

  當然你也可以用setdefault來代替。

  這也用一個更簡單卻多費點開銷的方法:

bag = [2, 3, 1, 2, 5, 6, 7, 9, 2, 7]  
countr = dict([(num, bag.count(num)) for num in bag])

for i in range(10):  
    print("Count of {}: {}".format(i, countr.get(i, 0)))
登入後複製

  你也可以用dict推導式。

countr = {num: bag.count(num) for num in bag}
登入後複製

  這兩種方法開銷大是因為它們在每次count被呼叫時都會對列表遍歷。

 8 使用函式庫

  現有的庫只需導入你就可以做你真正想做的了。

  還是說前面的例子,我們建立一個函數來數一個數字在列表中出現的次數。那麼,已經有一個函式庫就可以做這樣的事情。

from collections import Counter  
bag = [2, 3, 1, 2, 5, 6, 7, 9, 2, 7]  
countr = Counter(bag)

for i in range(10):  
    print("Count of {}: {}".format(i, countr[i]))
登入後複製

  一些用函式庫的理由:

  • # 程式碼是正確且經過測試的。


  • # 它們的演算法可能會是最優的,這樣就跑的更快。


  • # 抽象化:它們指向明確且文檔友好,你可以專注於那些還沒有實現的。


  • # 最後,它都已經在那裡了,你不用再造輪子了。

 9. 在清單中切片/步進

  你可以指定start的點和stop點,就像這樣list[start:stop:step]。我們取出清單中的前5個元素:

bag = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]  
for elem in bag[:5]:  
    print(elem)
登入後複製

  這就是切片,我們指定stop點是5,再停止前就會從清單中取出5個元素。

  要是最後5個元素怎麼做?

bag = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]  
for elem in bag[-5:]:  
    print(elem)
登入後複製

  沒看明白嗎? -5意味著從列表的結尾取出5個元素。

  如果你想對清單中元素間隔操作,你可能會這樣做:

bag = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]  
for index, elem in enumerate(bag):  
    if index % 2 == 0:
        print(elem)
登入後複製

  但是你應該這樣來做:

bag = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]  
for elem in bag[::2]:  
    print(elem)

# 或者用 ranges
bag = list(range(0,10,2))  
print(bag)
登入後複製

  這就是清單中的步進。 list[::2]意思是遍歷列表同時兩步驟取出一個元素。

  你可以用list[::-1]很酷的翻轉清單。

 10. tab鍵還是空白鍵

  長時間來看,將tab和空格混在一起會造成災難,你會看到IndentationError: unexpected indent。不管你選擇tab鍵還是空白鍵,你應該在你的檔案和專案中一直保持使用。

  一個使用空格而不是tab的原因是,tab不是在所有編輯器中都一樣的。視呢所用的編輯器,tab可能會被當成2到8個空格。

  你也可以在寫程式碼時用空格來定義tab。這樣你可以自己選擇用幾個空格當tab。大多數Python用戶是用4個空格。

  英文原文:The Python Way: 10 Tips

以上是Python開發的10個注意事項的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

C++開發注意事項:避免C++程式碼中的空指標異常 C++開發注意事項:避免C++程式碼中的空指標異常 Nov 22, 2023 pm 02:38 PM

C++開發中,空指標異常是常見的錯誤,經常出現在指標沒有被初始化或釋放後繼續使用等情況下。空指標異常不僅會導致程式崩潰,還可能造成安全漏洞,因此需要特別注意。本文將介紹如何避免C++程式碼中的空指標異常。初始化指標變數C++中的指標必須在使用前進行初始化。如果沒有初始化,指標將指向一個隨機的記憶體位址,這可能導致空指標異常。要初始化指針,可以將其指向一個可

鳴潮測試期間注意事項介紹 鳴潮測試期間注意事項介紹 Mar 13, 2024 pm 08:13 PM

在鳴潮測試期間,請避免進行系統升級、恢復原廠設定和換件等操作,以防資訊遺失導致遊戲登入異常。特別提醒,測試期間暫無申訴通道,請務必小心處理。鳴潮測試期間注意事項介紹答:不要升級系統、還原出廠設定、更換設備組件等。注意事項介紹:1、請在測試期間內謹慎升級系統避免資訊遺失。 2.若進行系統更新,可能產生無法登陸遊戲的問題。 3.在此階段,申訴通道暫未開啟,敬請玩家酌情選擇是否進行升級。 4.同時,一個遊戲帳號只能與一部安卓設備及一台PC搭配使用。 5.建議您等待測試結束後再行升級手機系統或還原原廠設定、更換設

第一次抖音開直播怎麼弄?第一次直播要注意什麼? 第一次抖音開直播怎麼弄?第一次直播要注意什麼? Mar 22, 2024 pm 04:10 PM

隨著短視頻平台的興起,抖音已成為許多人日常生活中不可或缺的一部分。而在抖音上開直播,與粉絲互動,更是許多用戶夢寐以求的事。那麼,第一次抖音開直播怎麼弄呢?一、第一次抖音開直播怎麼弄? 1.準備工作要開始直播,首先需要確保您的抖音帳號已經完成實名認證。您可以在抖音APP中的「我」->「設定」->「帳號與安全」中找到實名認證教學。完成實名認證後,您就可以滿足直播條件,開始在抖音平台進行直播了。 2.申請直播權限在滿足直播條件後,您需要申請直播權限。開啟抖音APP,點選「我」->「創作者中心」->「直

利用localstorage儲存資料的步驟和注意事項 利用localstorage儲存資料的步驟和注意事項 Jan 11, 2024 pm 04:51 PM

利用localStorage儲存資料的步驟和注意事項本文主要介紹如何使用localStorage來儲存數據,並提供相關的程式碼範例。 LocalStorage是一種在瀏覽器中儲存資料的方式,它可以將資料保存在使用者的本機電腦上,而不需要透過伺服器。以下是使用localStorage儲存資料的步驟和需要注意的事項。步驟一:偵測瀏覽器是否支援LocalStorage

在沒有網路的情況下安裝pip的步驟和注意事項 在沒有網路的情況下安裝pip的步驟和注意事項 Jan 18, 2024 am 10:02 AM

離線環境下安裝pip的方法及注意事項在網路不通暢的離線環境中,安裝pip成為一項挑戰。在本文中,將介紹幾種離線環境下安裝pip的方法,並提供具體的程式碼範例。方法一:使用離線安裝包在可以連接網路的環境中,使用以下指令從官方來源下載pip安裝包:pipdownloadpip此指令將會自動從官方來源下載pip及其依賴的包,並儲存在目前目錄下。將下載的壓縮包移到離

Python開發經驗分享:如何進行版本控制與發布管理 Python開發經驗分享:如何進行版本控制與發布管理 Nov 23, 2023 am 08:36 AM

Python開發經驗分享:如何進行版本控制和發布管理引言:在Python開發過程中,版本控制和發布管理是非常重要的環節。透過版本控制,我們可以輕鬆追蹤程式碼的變更、協同開發、解決衝突等;而發布管理則能夠幫助我們組織程式碼的部署、測試和發布流程,確保程式碼的品質和穩定性。本文將從版本控制和發布管理兩個方面,分享一些Python開發中的經驗和實踐。一、版本控製版本控

Python開發注意事項:避免常見的記憶體洩漏問題 Python開發注意事項:避免常見的記憶體洩漏問題 Nov 22, 2023 pm 01:43 PM

Python作為一種高級程式語言,具有易學易用和開發效率高等優點,在開發人員中越來越受歡迎。但是,由於其垃圾回收機制的實現方式,Python在處理大量記憶體時,容易出現記憶體洩漏問題。本文將從常見記憶體洩漏問題、造成問題的原因以及避免記憶體洩漏的方法三個方面來介紹Python開發過程中需要注意的事項。一、常見記憶體洩漏問題記憶體洩漏是指程式在運作中分配的記憶體空間無法釋放

Python開發建議:掌握並應用物件導向程式設計的原則 Python開發建議:掌握並應用物件導向程式設計的原則 Nov 22, 2023 pm 07:59 PM

Python是一門強大而靈活的程式語言,廣泛應用於各種領域的軟體開發。在Python開發過程中,掌握並應用物件導向程式設計(Object-OrientedProgramming,OOP)的原則是非常重要的。本文將介紹一些關鍵的Python開發建議,幫助開發者更能掌握並應用物件導向程式設計的原則。首先,物件導向程式設計的核心思想是將問題劃分為一系列的對象,並透過對象之

See all articles