成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

五個 Python 錯誤讓你看起來很弱

開發 前端
掌握Python不僅僅是記住語法——它是關于擁抱優雅,知道何時在簡潔性和可讀性之間取得平衡。?

Python是一種非常容易學習的語言,它不強制你使用特定的約定。同時,你也很容易陷入一些陷阱,讓你看起來像是一個初學者。為了避免看起來完全是個初學者,看看下面的技巧以及如何修復它們。

1. 不使用enumerate()

Python使得遍歷列表等事物變得超級簡單。看看下面的例子:

vals = ['Python', 'is', 'fun!']
for val in vals:
    print(val)

# Returns:
# Python
# is
# fun!

但是,如果你需要引用每個項目的索引會發生什么?你可能遇到過甚至寫過下面這樣的代碼:

vals = ['Python', 'is', 'fun!']
for i in range(len(vals)):
  print(i, vals[i])

# Returns:
# 0 Python
# 1 is
# 2 fun!

雖然這有效,但并不十分優雅!它也沒有立即清楚地表明你的代碼在做什么。這里就是enumerate()函數發揮作用的地方!讓我們看看它讓這個過程變得多么容易:

for idx, val in enumerate(vals):
  print(idx, val)

# Returns:
# 0 Python
# 1 is
# 2 fun!

作為一個專業提示,你甚至可以改變起始值。比如說,如果你想從1開始標記項目。然后你可以簡單地寫:

vals = ['Python', 'is', 'fun!']
for idx, val in enumerate(vals, start=1):
    print(idx, val)
    
# Returns:
# 1 Python
# 2 is
# 3 fun!

2. 不使用三元運算符

當你使用if-else語句來賦值時,你正在為一個簡單動作使用大量的代碼行。看看下面的場景:

amount = 100
if amount > 50:
    raise_amount = 20
else:
    raise_amount = 10

print(raise_amount)

# Returns:
# 20

在上面的例子中,我們創建了一個if-else語句來檢查某人銷售的數量是否超過50。如果是,那么他們將獲得20的加薪。否則,他們將獲得10的加薪。雖然我們的代碼很清晰,但并不十分簡潔。我們可以通過使用三元賦值來大大簡化這一點:

amount = 100
raise_amount = 20 if amount > 50 else 10

print(raise_amount)

# Returns:
# 20

這最適合非常簡單的賦值。雖然你可以更復雜,但不要為了簡潔而犧牲可讀性!

3. 不使用推導式

Python推導式可以快速創建列表、字典甚至生成器。它們提供了一種優雅且易于閱讀的方式來輕松創建數據結構。讓我們看看你會如何使用for循環來創建一個平方數列表的例子:

squares = []
for i in range(1, 6):
    squares.append(i ** 2)

print(squares)

# Returns:
# [1, 4, 9, 16, 25]

現在讓我們比較一下使用列表推導式的情況:

squares = [i ** 2 for i in range(1, 6)]
print(squares)

# Returns:
# [1, 4, 9, 16, 25]

我們可以看到使用列表推導式是多么簡單和明確!代碼不僅更簡潔,而且更容易閱讀。創建字典推導式也同樣容易。讓我們再次比較兩種方法,創建一個字典,其中鍵是原始數字,值是它的平方:

squares = {}
for i in range(1, 6):
    squares[i] = i ** 2

print(squares)

# Returns:
# {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

現在讓我們看看我們如何使用字典推導式來簡化這個!

squares = {i: i**2 for i in range(1, 6)}
print(squares)

# Returns:
# {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

現在,也很容易過度使用推導式,對一切都使用推導式。所以我會在這里加上一個額外的提示:除非有意義,否則不要對一切都使用它們!

4. 過度使用推導式

Python推導式非常強大——真的非常強大。你可以內置復雜的if-else語句,甚至可以將它們嵌套在一起。讓我們看看我們如何結合if-else語句:

even_odd_numbers = [
    "Even" if num % 2 == 0 else "Odd" 
    for num in range(10)
]
print(even_odd_numbers)

# Returns:
# ['Even', 'Odd', 'Even', 'Odd', 'Even', 'Odd', 'Even', 'Odd', 'Even', 'Odd']

在上面的例子中,我們使用三元運算符在繼續迭代的同時返回一個值。現在,這個例子很簡單——但讓我們看看一個更復雜的:

result = [x * 2 if x % 2 == 0 else x * 3 for x in range(10) if x != 5]

這一點也不有趣,難以閱讀。這就引出了我的主要觀點——如果使用for循環更清晰,就不要寫推導式。讓我們將這個推導式轉換為循環,看看閱讀起來有多容易:

result = []
for x in range(10):
    if x != 5:
        if x % 2 == 0:
            result.append(x * 2)
        else:
            result.append(x * 3)

我們可以看到,雖然我們用更多的行來寫這段代碼,但它的可讀性要高得多!

5. 不使用itertools

Python的itertools是內置在Python中的一個隱藏的寶石。表面上,它的許多功能看起來很簡單,但它們提供了優雅而強大的方法來迭代不同的對象。

防止嵌套循環

假設你有兩個列表,你想遍歷所有可能的組合。你可以像下面這樣編寫一個嵌套的for循環:

colors = ['Red', 'Green']
sizes = ['S', 'M', 'L']

for color in colors:
    for size in sizes:
        print(color, size)

# Returns:
# Red S
# Red M
# Red L
# Green S
# Green M
# Green L

類似于我們在這篇文章中討論的其他一切,這種方法有效,但并不十分優雅。幸運的是,itertools帶有product()函數,它創建了所有項目的笛卡爾積。這意味著我們可以直接在一個for循環中解包值,如下所示:

from itertools import product
colors = ['Red', 'Green']
sizes = ['S', 'M', 'L']

for color, size in product(colors, sizes):
    print(color, size)

# Returns:
# Red S
# Red M
# Red L
# Green S
# Green M
# Green L

成對遍歷列表

在某些情況下,你需要成對地遍歷列表,這意味著你需要訪問一個項目及其鄰居。為此,你可以編寫以下代碼:

vals = [1, 2, 3, 4]

for i in range(len(vals) - 1):
    print((vals[i], vals[i+1]))

# Returns:
# (1, 2)
# (2, 3)
# (3, 4)

這種方法效果很好,但不易閱讀,也不明確它的作用。這就是Python 3.10中引入的pairwise()函數派上用場的地方!讓我們看看我們如何簡化我們的代碼:

from itertools import pairwise
vals = [1, 2, 3, 4]

for pair in pairwise(vals):
    print(pair)

# Returns:
# (1, 2)
# (2, 3)
# (3, 4)

這是一個比我們之前寫的代碼更明確的版本,讓我們立即理解代碼的目的。itertools庫為你提供了許多有用的函數來迭代對象。知道何時應用這些函數真的能讓你的技能提升到另一個層次。

結論

掌握Python不僅僅是記住語法——它是關于擁抱優雅,知道何時在簡潔性和可讀性之間取得平衡。

責任編輯:趙寧寧 來源: 小白玩轉Python
相關推薦

2023-07-11 15:43:16

JavaScript技巧

2022-06-21 14:30:16

Vim自定義Linux

2021-12-19 22:48:53

JavaScript開發代碼

2022-02-28 12:57:09

GNOMEPlasma桌面

2024-08-27 15:25:33

2022-02-21 12:05:49

LibreOffiLinux工具欄

2023-06-27 23:57:06

JavaScrip技能

2023-08-01 14:36:00

JavaScript開發

2022-11-09 15:36:11

Javascript技巧代碼

2025-03-17 10:42:12

2020-05-27 13:29:04

編程PythonJava

2022-09-26 12:53:54

JavaScrip單行代碼

2025-02-18 11:01:49

2021-02-02 13:23:47

Python語言線程

2024-03-08 12:20:25

Python代碼

2020-02-26 21:57:09

Lambdajava8方法引用

2020-06-29 15:00:31

UbuntumacOSLinux

2021-10-02 10:36:00

YAML編程語言軟件開發

2013-12-30 10:06:51

智能硬件3D打印互聯網化

2016-08-01 11:33:40

云遷移云安全合規性
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲免费精品 | 国产精品123区 | 黄a网| 日日噜| 久久久久久国产精品 | 国产成人免费网站 | 在线欧美视频 | 日韩视频中文字幕 | 国产精品区一区二 | 久久成人国产精品 | 狠狠艹| 欧美久久国产 | 日韩欧美专区 | 三a毛片 | 青青久视频 | 国产高清视频一区二区 | 中文字幕日韩一区二区 | 日日摸夜夜添夜夜添精品视频 | 国产视频在线观看一区二区三区 | 毛片网在线观看 | 久久久久久蜜桃一区二区 | 国户精品久久久久久久久久久不卡 | 99精品在线免费观看 | 色资源在线观看 | 国产精品视频导航 | 日韩久草 | 欧美视频在线看 | 久久久久无码国产精品一区 | 久久国| 成人精品鲁一区一区二区 | 国产专区在线 | 国产一区二区三区 | 日日碰狠狠躁久久躁婷婷 | 国产精品久久久久影院色老大 | 伊人久久综合影院 | 亚洲三区在线观看 | 成人在线观看免费 | 欧美男人天堂 | 亚洲精品电影在线观看 | 亚洲a视| 在线久草|