欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何避免Python中的反模式編程使用實(shí)戰(zhàn)講解

 更新時(shí)間:2024年01月18日 08:53:30   作者:簡訊Alfred  
這篇文章主要為大家介紹了如何Python中的反模式編程使用實(shí)戰(zhàn)講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

Python 受歡迎的原因之一是其靈活性,這對(duì)開發(fā)人員有很多好處。然而,它也包含一些陷阱和壞習(xí)慣,這些陷阱和壞習(xí)慣會(huì)導(dǎo)致代碼難以閱讀、維護(hù)或調(diào)試。在本文中,我們將介紹一些常見的 Python 反模式以及如何避免它們。建議新手程序員避免不好的編碼習(xí)慣,并且不斷練習(xí)良好的編碼風(fēng)格,會(huì)為以后的學(xué)習(xí)和工作打下良好基礎(chǔ)。

反模式是什么

反模式經(jīng)常被用來防御破壞性的、無效的或無益的情況。起初,這似乎是個(gè)好主意,但從長遠(yuǎn)來看,它可能會(huì)帶來意想不到的后果或問題。反模式的出現(xiàn)可能是因?yàn)榫帉懻呷狈?jīng)驗(yàn)或懶惰的結(jié)果。

為什么要避免反模式

反模式會(huì)降低代碼的可讀性、可維護(hù)性,甚至?xí)绊懙叫阅?、安全性和兼容性。它們還可能增加難以發(fā)現(xiàn)的故障、錯(cuò)誤或漏洞。通過避免反模式,您可以開發(fā)出符合 Python 習(xí)慣和最佳實(shí)踐的整潔代碼。閱讀、編輯、測試和重用整潔的代碼會(huì)更簡單。

有哪些常見的 Python 反模式

Python 反模式有很多,但一定要避免以下四種。

不使用 with 打開文件

Python 中最常見的反模式之一就是不使用 with 語句打開文件。例如:

# Bad
f = open(“file.txt”, “r”)
data = f.read()
f.close()

這段代碼很糟糕,因?yàn)樗荒鼙WC在出現(xiàn)異?;蛱崆胺祷貢r(shí)正確關(guān)閉文件。如果文件沒有關(guān)閉,可能會(huì)導(dǎo)致資源泄漏、文件損壞或權(quán)限錯(cuò)誤。在 Python 中打開文件的正確方法是使用 with 語句,它會(huì)創(chuàng)建一個(gè)上下文管理器,在代碼塊結(jié)束時(shí)自動(dòng)關(guān)閉文件。例如:

# Good
with open(“file.txt”, “r”) as f:
    data = f.read()

這段代碼就很棒,因?yàn)樗梢源_保無論塊內(nèi)發(fā)生了什么,文件都會(huì)被關(guān)閉。它還使代碼更簡潔,更易于閱讀。

不需要使用 list/dict/set 解析

Python 中另一個(gè)常見的反模式是,當(dāng)有更簡單或更有效的方法來實(shí)現(xiàn)相同結(jié)果時(shí),卻使用 list/dict/set 解析。例如:

# Bad
numbers = [1, 2, 3, 4]
squares = [n ** 2 for n in numbers]

這段代碼很糟糕,因?yàn)樗鼤?huì)創(chuàng)建一個(gè)新的列表對(duì)象,消耗內(nèi)存和時(shí)間。創(chuàng)建不可變列表的更好方法是使用生成器表達(dá)式,它可以根據(jù)需要對(duì)每個(gè)元素進(jìn)行評(píng)估。例如:

# Good
numbers = [1, 2, 3, 4]
squares = (n ** 2 for n in numbers)

這段代碼比上一段效果好一點(diǎn)。因?yàn)樗粍?chuàng)建新的列表對(duì)象,而是返回一個(gè)生成器對(duì)象,可以循環(huán)使用或傳遞給另一個(gè)函數(shù)。它還可以節(jié)省內(nèi)存和時(shí)間。

同樣,如果有內(nèi)置函數(shù)可以更高效地完成同樣的事情,那么就應(yīng)該避免使用 dict/set 解析。例如:

# Bad
words = [“apple”, “banana”, “cherry”]
lengths = {w: len(w) for w in words}

這段代碼會(huì)創(chuàng)建一個(gè)新的 dict 對(duì)象,消耗內(nèi)存和時(shí)間。創(chuàng)建字長 dict 的更好方法是使用 dict 函數(shù),并將生成器表達(dá)式作為參數(shù)。例如:

# Good
words = [“apple”, “banana”, “cherry”]
lengths = dict((w, len(w)) for w in words)

這段代碼沒有創(chuàng)建一個(gè)新的 dict 對(duì)象,而是調(diào)用了一個(gè)以生成器對(duì)象為參數(shù)的 dict 函數(shù)。它還能節(jié)省內(nèi)存和時(shí)間。

非必要不使用生成器

雖然生成器在創(chuàng)建懶惰迭代時(shí)非常有用,但并非在任何情況下都是最佳選擇。有時(shí),如果使用生成器會(huì)降低代碼的可讀性或性能,那么使用生成器就是一種反模式。例如:

# Bad
def get_even_numbers(numbers):
    for n in numbers:
        if n % 2 == 0:
          yield n
numbers = [1, 2, 3, 4]
even_numbers = get_even_numbers(numbers)
print(list(even_numbers))

這段代碼之所以糟糕,是因?yàn)樗褂昧艘粋€(gè)生成器函數(shù)來過濾列表中的偶數(shù)。雖然這看起來是個(gè)好主意,但實(shí)際上卻使代碼變得更加冗長,效率也更低。從列表中過濾出偶數(shù)的更好方法是使用 filter 函數(shù),它返回的生成器對(duì)象可以轉(zhuǎn)化為列表。例如:

# Good
def is_even(n):
    return n % 2 == 0
numbers = [1, 2, 3, 4]
even_numbers = filter(is_even, numbers)
print(list(even_numbers))

這段代碼使用過濾器函數(shù)創(chuàng)建了一個(gè)生成器對(duì)象,可以將其轉(zhuǎn)化為一個(gè)列表。它還使代碼更簡潔,更易于閱讀。

在函數(shù)調(diào)用中返回不止一種類型的對(duì)象

Python 中另一個(gè)常見的反模式是在函數(shù)調(diào)用中返回不止一種對(duì)象類型。

# Bad
def get_user(id):
    user = db.get_user(id)
        if user:
            return user
        else:
            return None, “User not found”

這段代碼并不 Pythonic,因?yàn)樗鼤?huì)根據(jù)數(shù)據(jù)庫查詢結(jié)果返回缺少的 User 或 tuple 對(duì)象以及錯(cuò)誤信息。這會(huì)使代碼變得混亂和容易出錯(cuò),因?yàn)檎{(diào)用者必須在使用返回值之前檢查其類型。在函數(shù)調(diào)用中處理錯(cuò)誤的更好方法是引發(fā)異常,調(diào)用者可以捕獲并處理該異常。例如:

# Good
def get_user(id):
    user = db.get_user(id)
        if user:
            return user
        else:
            raise ValueError(“User not found”)
try:
    user = get_user(id)
except ValueError as e:
    print(e)

這段代碼如果找不到 user,它就會(huì)引發(fā)異常,調(diào)用者可以捕獲并處理這個(gè)異常。它還能使代碼更加一致和清晰。

通過本文我們了解了 Python 中一些常見的反模式以及如何避免它們。通過遵循 Python 習(xí)慣和最佳實(shí)踐,您可以編寫出易于閱讀、維護(hù)和調(diào)試的簡潔代碼,更多關(guān)于Python反模式編程的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 解決ToPILImage時(shí)出現(xiàn)維度報(bào)錯(cuò)問題pic should be 2/3 dimensional. Got 4 dimensions.

    解決ToPILImage時(shí)出現(xiàn)維度報(bào)錯(cuò)問題pic should be 2/3 d

    這篇文章主要介紹了解決ToPILImage時(shí)出現(xiàn)維度報(bào)錯(cuò)問題pic should be 2/3 dimensional. Got 4 dimensions.具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • nlp自然語言處理基于SVD的降維優(yōu)化學(xué)習(xí)

    nlp自然語言處理基于SVD的降維優(yōu)化學(xué)習(xí)

    這篇文章主要為大家介紹了nlp自然語言處理基于SVD的降維優(yōu)化學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • 使用Python開發(fā)游戲運(yùn)行腳本實(shí)現(xiàn)模擬點(diǎn)擊

    使用Python開發(fā)游戲運(yùn)行腳本實(shí)現(xiàn)模擬點(diǎn)擊

    這篇文章主要介紹了使用Python開發(fā)游戲運(yùn)行腳本實(shí)現(xiàn)模擬點(diǎn)擊,這樣我們要想實(shí)現(xiàn)手游腳本開發(fā)的第一步,就是下載Android模擬器,然后在對(duì)安卓模擬器進(jìn)行鼠標(biāo)和鍵盤的模擬,以此來實(shí)現(xiàn)自動(dòng)化游戲腳本,需要的朋友可以參考下
    2021-11-11
  • pytorch 轉(zhuǎn)換矩陣的維數(shù)位置方法

    pytorch 轉(zhuǎn)換矩陣的維數(shù)位置方法

    今天小編就為大家分享一篇pytorch 轉(zhuǎn)換矩陣的維數(shù)位置方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 解讀keras中的正則化(regularization)問題

    解讀keras中的正則化(regularization)問題

    這篇文章主要介紹了解讀keras中的正則化(regularization)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Python3實(shí)現(xiàn)發(fā)送QQ郵件功能(附件)

    Python3實(shí)現(xiàn)發(fā)送QQ郵件功能(附件)

    這篇文章主要為大家詳細(xì)介紹了Python3實(shí)現(xiàn)發(fā)送QQ郵件功能,附件方面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • 詳解pytest實(shí)現(xiàn)mark標(biāo)記功能詳細(xì)介紹

    詳解pytest實(shí)現(xiàn)mark標(biāo)記功能詳細(xì)介紹

    這篇文章主要介紹了詳解pytest實(shí)現(xiàn)mark標(biāo)記功能詳細(xì)介紹,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 利用Python制作簡易的核酸檢測日歷

    利用Python制作簡易的核酸檢測日歷

    這篇文章主要為大家詳細(xì)介紹了如何利用Python語言制作簡易的核酸檢測日歷,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手嘗試一下
    2022-09-09
  • Python字符串格式化輸出代碼實(shí)例

    Python字符串格式化輸出代碼實(shí)例

    這篇文章主要介紹了Python字符串格式化輸出代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • selenium XPath定位的實(shí)現(xiàn)示例

    selenium XPath定位的實(shí)現(xiàn)示例

    XPath是一種在XML文檔中定位和選擇節(jié)點(diǎn)的語言,通過路徑表達(dá)式遍歷XML樹,支持節(jié)點(diǎn)選取、字符串匹配、數(shù)值計(jì)算、邏輯運(yùn)算等功能,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10

最新評(píng)論