自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

新手必看:優(yōu)雅地避過(guò)Python常見(jiàn)錯(cuò)誤,編寫(xiě)高效代碼

開(kāi)發(fā) 前端
通過(guò)避免這些常見(jiàn)錯(cuò)誤,Python開(kāi)發(fā)者可以編寫(xiě)更高效、更可讀、更易于維護(hù)的代碼。擁抱Pythonic實(shí)踐不僅使你的代碼優(yōu)雅,而且也符合Python的哲學(xué),使編程更加愉快和高效。

美女曾說(shuō):“如果你堅(jiān)持錯(cuò)誤的編碼習(xí)慣而不改變,你將永遠(yuǎn)找不到幸福。” 好吧,她并沒(méi)有真的這么說(shuō),但一定是……如果她是一名Python開(kāi)發(fā)者的話。

停止錯(cuò)誤做法的更好方法是練習(xí)正確的做法,但不要過(guò)度使用它們。有一些好的做法我喜歡使用,但只在可讀性不受影響時(shí)使用它們。

Python以其簡(jiǎn)潔和可讀性而受到開(kāi)發(fā)者的青睞。然而,即使是經(jīng)驗(yàn)豐富的程序員也可能陷入導(dǎo)致代碼效率低下、可讀性差和更容易出錯(cuò)的習(xí)慣。在這里,我們將探討Python編程中的常見(jiàn)陷阱以及避免它們的重要性。

if-else語(yǔ)句

Python中的if-else語(yǔ)句是一個(gè)基本的控制流程工具,它允許你根據(jù)某些條件執(zhí)行不同的代碼塊。以下是如何在Python中使用if-else和elif(else if)語(yǔ)句:

基本的if語(yǔ)句

如果指定的條件為真,則執(zhí)行代碼塊。

# 停止這樣做:
x = 10
if x > 5: print("x is greater than 5")
# 改為這樣做:
x = 10
if x > 5: print(f"{x} is greater than 5")

這將在x確實(shí)大于5時(shí)輸出:“x is greater than 5”。

if-else語(yǔ)句

如果條件為真,則執(zhí)行一個(gè)代碼塊,如果條件為假,則執(zhí)行另一個(gè)代碼塊。

# 停止這樣做:
x = 6


def funcx(x):
    if x > 5:
        print(f"{x} is greater than 5")
    else:
        print(f"{x} is not greater than 5")


funcx(x)

# 改為這樣做:
x = 6


def funcx(x):
    # 首先呈現(xiàn)最頻繁的情況,避免不必要的測(cè)試。
    if x > 5: return f"{x} is greater than 5"
    return f"{x} is not greater than 5"


print(funcx(x))
# 或者
x = 6
print(f"{x} is greater than 5" if x > 5 else f"{x} is not greater than 5")

顯然,方法取決于上下文……

這將輸出:x is not greater than 5,因?yàn)閤是3,它不大于5。

if-elif-else鏈

用于檢查多個(gè)條件。如果第一個(gè)條件為假,它將檢查下一個(gè)條件(elif),依此類(lèi)推。如果所有條件都不為真,它將執(zhí)行else塊中的代碼。

# 停止這樣做:
x = 5
if x > 10:
    print("x is greater than 10")
elif x > 7:
    print("x is greater than 7")
elif x > 5:
    print("x is greater than 5")
else:
    print("x is 5 or less")


# 改為這樣做:
def test(x, value):
    return f"{x} is greater than {value}" if x > value else f"x is {x}, less than or equal to {value}"


print(test(5, 10))
print(test(5, 7))
print(test(5, 5))

利用函數(shù)防止重復(fù)。輸出:x is 5 or less。

這些結(jié)構(gòu)是Python編程中的基礎(chǔ),并且用于控制基于不同條件的執(zhí)行流程而不重復(fù)。

在Python中,沒(méi)有像C++或Java等其他編程語(yǔ)言中內(nèi)置的switch或case語(yǔ)句。然而,你可以使用字典將案例映射到函數(shù)或值來(lái)實(shí)現(xiàn)類(lèi)似的功能。這種方法通常更符合Python風(fēng)格,可以更可讀和高效。

因此,停止這樣做:

if case == 1:
    return "This is case 1"
elif case == 2:
    return "This is case 2"
elif case == 3:
    return "This is case 3"
else:
    return "This is the default case"

這是如何使用字典實(shí)現(xiàn)類(lèi)似switch結(jié)構(gòu)的基本示例:

# 改為這樣做:
def case1(): return "This is case 1"


def case2(): return "This is case 2"


def case3(): return "This is case 3"


def default_case(): return "This is the default case"


switch = {1: case1, 2: case2, 3: case3}


def switch_case(case):
    return switch.get(case, default_case)()


# 示例用法
print(switch_case(1))  # 輸出:This is case 1
print(switch_case(4))  # 輸出:This is the default case

在這個(gè)示例中:

  • 我們定義了一組函數(shù)(case1、case2、case3和default_case),它們對(duì)應(yīng)于每個(gè)案例。
  • 我們創(chuàng)建了一個(gè)名為switch的字典,將案例鍵(如1、2、3)映射到相應(yīng)的函數(shù)。
  • switch_case函數(shù)接受一個(gè)案例參數(shù),使用get從switch字典中檢索相應(yīng)的函數(shù),并調(diào)用它。如果找不到案例,它默認(rèn)為default_case。

這種方法靈活,并且可以適應(yīng)各種用例。你可以將案例映射到函數(shù)(如上所示),或者如果每個(gè)案例不需要復(fù)雜的邏輯,也可以直接映射到值。

列表推導(dǎo)式是什么?

列表推導(dǎo)式是Python最受歡迎和獨(dú)特的特性之一,它提供了一種簡(jiǎn)潔而富有表現(xiàn)力的方式來(lái)創(chuàng)建列表。這個(gè)強(qiáng)大的工具以一種可讀和高效的方式轉(zhuǎn)換和過(guò)濾數(shù)據(jù)。理解和有效使用列表推導(dǎo)式可以大大提升Python編程中的代碼質(zhì)量。

列表推導(dǎo)式提供了一種簡(jiǎn)潔的方法,從其他列表或可迭代對(duì)象創(chuàng)建列表。它們?cè)诜嚼ㄌ?hào)內(nèi)編寫(xiě),就像常規(guī)列表一樣,但包括一個(gè)表達(dá)式,后跟一個(gè)for子句,并且可選地,如果有子句。表達(dá)式可以是任何有效的Python表達(dá)式,它在for子句中的元素上操作。

語(yǔ)法

列表推導(dǎo)式的基本語(yǔ)法是:

[expression for item in iterable if condition]
  • expression:應(yīng)用于可迭代對(duì)象中每個(gè)項(xiàng)目的Python表達(dá)式。
  • item:可迭代對(duì)象中的對(duì)象或值。
  • iterable:一個(gè)序列、集合或迭代器對(duì)象。
  • condition:一個(gè)可選的if語(yǔ)句,用于從可迭代對(duì)象中過(guò)濾項(xiàng)目。

示例

  • 基本列表推導(dǎo)式:
squares = [x ** 2 for x in range(10)]

這創(chuàng)建了一個(gè)從0到9的數(shù)字平方的列表。

  • 帶有條件邏輯的列表推導(dǎo)式:
even_squares = [x ** 2 for x in range(10) if x % 2 == 0]

這創(chuàng)建了一個(gè)從0到9的偶數(shù)平方的列表。

  • 嵌套列表推導(dǎo)式:
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [num for row in matrix for num in row]

這將一個(gè)矩陣展平為一個(gè)單一的列表。

列表推導(dǎo)式的優(yōu)點(diǎn)

  1. 簡(jiǎn)潔性和可讀性:它們?cè)试S通過(guò)在序列中的每個(gè)項(xiàng)目上應(yīng)用表達(dá)式,以一種清晰和簡(jiǎn)潔的行創(chuàng)建新列表。
  2. 性能:它們通常比傳統(tǒng)的循環(huán)和map()調(diào)用更快,因?yàn)樗鼈儽粌?yōu)化為Python解釋器在循環(huán)期間發(fā)現(xiàn)可預(yù)測(cè)的模式。
  3. 多功能性:它們可以用于廣泛的任務(wù),包括過(guò)濾元素、應(yīng)用函數(shù)和轉(zhuǎn)換數(shù)據(jù)。

最佳實(shí)踐和限制

  • 避免過(guò)度復(fù)雜:對(duì)于非常復(fù)雜的表達(dá)式或操作,列表推導(dǎo)式的可讀性?xún)?yōu)勢(shì)可能會(huì)喪失,使得傳統(tǒng)的for循環(huán)成為更好的選擇。
  • 內(nèi)存使用:由于列表推導(dǎo)式在內(nèi)存中創(chuàng)建列表,它們可能不適用于大型數(shù)據(jù)集。在這種情況下,考慮使用生成器表達(dá)式。

停止這樣做:

data = []
for idx, value in enumerate(range(10)):
    data.append({"key": value, "idx": idx})
print(data)  # 輸出:[{'key': 0, 'idx': 0}, {'key': 1, 'idx': 1}, ...]

改為這樣做:

print([{"key": value, "idx": idx} for idx, value in enumerate(range(10))])

停止錯(cuò)誤用法

不要過(guò)度使用列表推導(dǎo)式

列表推導(dǎo)式是Python中的一個(gè)強(qiáng)大特性,但過(guò)度使用它們會(huì)使你的代碼難以閱讀,特別是對(duì)于復(fù)雜操作。它們最適合用于簡(jiǎn)單的轉(zhuǎn)換。對(duì)于更復(fù)雜的任務(wù),考慮使用循環(huán)或生成器表達(dá)式,這些表達(dá)式更易于閱讀。

不要忽視Pythonic慣例

Python有一套稱(chēng)為“Pythonic”的慣用法慣例。這些包括在循環(huán)中使用enumerate() 、理解真理值測(cè)試和適當(dāng)使用列表推導(dǎo)式。忽視這些慣例會(huì)使你的代碼效率低下,其他Python開(kāi)發(fā)者也難以理解。

不要誤用底層數(shù)據(jù)結(jié)構(gòu)

理解和使用適合任務(wù)的正確數(shù)據(jù)結(jié)構(gòu)至關(guān)重要。例如,使用列表進(jìn)行需要頻繁查找元素的操作可能會(huì)導(dǎo)致效率低下;集合或字典通常是更好的選擇。始終考慮不同數(shù)據(jù)結(jié)構(gòu)上操作的復(fù)雜性。

不要避免使用標(biāo)準(zhǔn)庫(kù)

Python的標(biāo)準(zhǔn)庫(kù)功能豐富且多才多藝。不利用這些庫(kù)可能導(dǎo)致重復(fù)造輪子,結(jié)果就是額外的工作和潛在的錯(cuò)誤。像itertools、collections和functools這樣的模塊可以顯著簡(jiǎn)化你的代碼。

不要編寫(xiě)長(zhǎng)函數(shù)

長(zhǎng)函數(shù)更難以維護(hù)和理解。Python鼓勵(lì)編寫(xiě)小型、可重用的函數(shù),每個(gè)函數(shù)做好一件事情。這不僅提高了可讀性,也使調(diào)試更加容易。

不要忽視錯(cuò)誤處理

Python的錯(cuò)誤處理機(jī)制,使用try-except塊,經(jīng)常被低估。有效的錯(cuò)誤處理對(duì)于構(gòu)建穩(wěn)健的應(yīng)用程序至關(guān)重要。重要的是捕獲特定的異常并適當(dāng)?shù)靥幚硭鼈儯皇鞘褂靡粋€(gè)廣泛的except: pass語(yǔ)句。

不要避免Pythonic循環(huán)

在Python中使用傳統(tǒng)的C風(fēng)格循環(huán)是一個(gè)常見(jiàn)的錯(cuò)誤。Python提供了更有效、更易讀的循環(huán)方式,例如使用for item in iterable:結(jié)構(gòu)或列表推導(dǎo)式。

不要忽視代碼風(fēng)格指南

Python的PEP 8為編寫(xiě)Python代碼提供了一個(gè)風(fēng)格指南。一致的編碼風(fēng)格提高了可讀性和可維護(hù)性。像flake8或black這樣的工具可以自動(dòng)遵守這些風(fēng)格。

結(jié)論

通過(guò)避免這些常見(jiàn)錯(cuò)誤,Python開(kāi)發(fā)者可以編寫(xiě)更高效、更可讀、更易于維護(hù)的代碼。擁抱Pythonic實(shí)踐不僅使你的代碼優(yōu)雅,而且也符合Python的哲學(xué),使編程更加愉快和高效。

記住,可讀性是首要考慮的!

責(zé)任編輯:華軒 來(lái)源: 哈希編程
相關(guān)推薦

2017-04-12 11:16:08

Python終端編程

2023-01-09 15:16:17

2017-12-07 18:02:01

Python新手運(yùn)行時(shí)錯(cuò)誤

2022-05-24 06:07:48

JShack用戶代碼

2024-06-24 14:19:48

2024-08-16 21:38:43

Python代碼編程

2011-07-03 22:48:55

SEO

2010-08-31 13:32:12

CSS

2015-01-28 14:30:31

android代碼

2011-07-19 15:49:04

Xcode 文件

2023-11-01 15:32:58

2010-06-11 09:36:44

MySQL使用前奏

2011-05-31 16:47:47

SEO

2021-02-23 10:48:30

Python代碼開(kāi)發(fā)

2023-11-22 13:05:12

Pytest測(cè)試

2011-01-19 15:52:18

Qmail錯(cuò)誤代碼

2024-03-08 08:00:00

Python開(kāi)發(fā)裝飾器

2024-06-17 08:04:23

2020-03-30 15:12:27

Python開(kāi)發(fā)錯(cuò)誤

2011-11-25 10:35:20

Java
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)