日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

初學者易犯的四個Python錯誤!

來源: 責編: 時間:2024-05-09 09:28:07 241觀看
導讀Python 是一種學習起來極其簡單的語言,它不會強迫你使用特定的規定。但是也容易讓人陷入一些陷阱,讓你表現得像初學者。為避免看起來像個完全的新手,請查看下面的技巧以及如何糾正它們。1. 不會用enumerate()Python 讓遍

Python 是一種學習起來極其簡單的語言,它不會強迫你使用特定的規定。但是也容易讓人陷入一些陷阱,讓你表現得像初學者。為避免看起來像個完全的新手,請查看下面的技巧以及如何糾正它們。sLk28資訊網——每日最新資訊28at.com

sLk28資訊網——每日最新資訊28at.com

1. 不會用enumerate()

Python 讓遍歷事物變得超級簡易,比如列表。看看下面的例子:sLk28資訊網——每日最新資訊28at.com

vals = ['Python', '好玩!']for val in vals:    print(val)# 輸出:# Python# 好玩!

如果你需要引用每個項目的索引,會發生些什么呢?你可能會遇到,甚至寫出如下所示的代碼:sLk28資訊網——每日最新資訊28at.com

vals = ['Python', '好玩!']for i in range(len(vals)):    print(i, vals[i])# 輸出:# 0 Python# 1 好玩!

雖然這行得通,但不夠優美!同時它也無法立即明白你的代碼在做什么。sLk28資訊網——每日最新資訊28at.com

這就是 enumerate() 函數派上用場的地方!看看它是如何讓這個過程變得更容易:sLk28資訊網——每日最新資訊28at.com

vals = ['Python', '好玩!']for i, val in enumerate(vals):    print(i, val)# 輸出:# 0 Python# 1 好玩!

這是不是好多了?sLk28資訊網——每日最新資訊28at.com

作為一個專業的提示,你甚至可以改變初始值。假如你想讓從索引1開始迭代,則可以簡單地寫為:sLk28資訊網——每日最新資訊28at.com

vals = ['Python', '好玩!']for idx, val in enumerate(vals, start=1):    print(idx, val)# 輸出:# 1 Python# 2 好玩!

好的,讓我們深入研究下一個新手習慣!sLk28資訊網——每日最新資訊28at.com

2. 不會用三元運算符

當你使用 if-else 語句進行值的分配時,你為一個簡單的操作寫了許多行代碼。看看下面的場景:sLk28資訊網——每日最新資訊28at.com

amount = 100if amount > 50:    raise_amount = 20else:    raise_amount = 10print(raise_amount)# 輸出:# 20

在上面的例子中,創建了一個 if-else 語句,檢查某人賣出的金額是否超過 50。如果是的話,他們就會漲薪 20。否則,他們將獲得 10 的漲幅。sLk28資訊網——每日最新資訊28at.com

我們的代碼很清晰,但并不簡練。此時可通過使用三元運算符大大簡化:sLk28資訊網——每日最新資訊28at.com

amount = 100raise_amount = 20 if amount > 50 else 10print(raise_amount)# 輸出:# 20

這對于非常簡單的分配賦值來說效果最好。當然你可以讓其變的更復雜,但不要為了簡練而犧牲可讀性!sLk28資訊網——每日最新資訊28at.com

3. 不會用推導

3a. 正確使用推導

Python 推導可以輕松創建列表、字典,甚至生成器。它們提供了一種優雅且可讀的方式來輕松創建數據結構。sLk28資訊網——每日最新資訊28at.com

讓我們看一個你如何使用 for 循環來創建一個平方數列表的例子:sLk28資訊網——每日最新資訊28at.com

squares = []for i in range(1, 6):    squares.append(i ** 2)print(squares)# 輸出:# [1, 4, 9, 16, 25]

現在讓我們將其與列表推導進行比較:sLk28資訊網——每日最新資訊28at.com

squares = [i ** 2 for i in range(1, 6)]print(squares)# 輸出:# [1, 4, 9, 16, 25]

可以看到使用列表推導多么的簡單和明確!代碼不僅更精簡,且更容易閱讀。sLk28資訊網——每日最新資訊28at.com

創建字典推導也同樣容易。再通過創建一個字典來比較兩種方法,其中鍵是原始數字,值是其平方:sLk28資訊網——每日最新資訊28at.com

squares = {}for i in range(1, 6):    squares[i] = i ** 2print(squares)# 輸出:# {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

現在讓我們看看我們如何用字典推導來簡化!sLk28資訊網——每日最新資訊28at.com

squares = {i: i ** 2 for i in range(1, 6)}print(squares)# 輸出:# {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

現在,大家可能很容易過度使用推導用于生成列表或字典。但除非有意義,否則不要把它們用在所有事情上!sLk28資訊網——每日最新資訊28at.com

3b. 過度使用推導

Python 推導很強大。你可以在里面構建復雜的 if-else 語句,甚至可以在其中互相嵌套。sLk28資訊網——每日最新資訊28at.com

讓我們看看我們如何應用 if-else 語句:sLk28資訊網——每日最新資訊28at.com

even_odd_numbers = [    "偶數" if num % 2 == 0 else "奇數"    for num in range(10)]print(even_odd_numbers)# 輸出:# ['偶數', '奇數', '偶數', '奇數', '偶數', '奇數', '偶數', '奇數', '偶數', '奇數']

上面這個例子中,使用了三元運算符返回一個值,同時繼續迭代。這個例子相當簡單 —— 但看看更復雜的一個:sLk28資訊網——每日最新資訊28at.com

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

哎!閱讀起來有點費勁了。這就是重點說明的地方 —— 如果推導不清晰,就不要寫它。sLk28資訊網——每日最新資訊28at.com

讓我們將這個推導轉換成一個循環看看,能否更易讀:sLk28資訊網——每日最新資訊28at.com

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

可以看到,雖然使用了更多行來編寫這段代碼,但易讀得多!sLk28資訊網——每日最新資訊28at.com

4. 不會用 itertools

Python 的 itertools 是 Python 自帶的一個隱藏的寶石。盡管表面上,它的許多功能看似簡單,但它們提供了優雅且強大的方式來迭代不同的對象。sLk28資訊網——每日最新資訊28at.com

4a. 防止嵌套循環

假設你有兩個列表,你想遍歷所有可能的組合。可以寫一個如下所示的嵌套 for 循環:sLk28資訊網——每日最新資訊28at.com

colors = ['紅色', '綠色']sizes = ['S', 'M', 'L']for color in colors:    for size in sizes:        print(color, size)# 輸出:# 紅色 S# 紅色 M# 紅色 L# 綠色 S# 綠色 M# 綠色 L

與這篇文章中其他內容一樣,這種方法行得通,但它并不真正的優雅。sLk28資訊網——每日最新資訊28at.com

幸運的是,itertools 附帶了 product() 函數,它生成所有項的笛卡爾積。意味著可以在單個的for循環中直接解包值,如下所示:sLk28資訊網——每日最新資訊28at.com

from itertools import productcolors = ['紅色', '綠色']sizes = ['S', 'M', 'L']for color, size in product(colors, sizes):    print(color, size)# 輸出:# 紅色 S# 紅色 M# 紅色 L# 綠色 S# 綠色 M# 綠色 L

可以看到這種方法有多么簡單!它也更加節省內存,因為它只在你需要使用值之前將值存儲在生成器中。sLk28資訊網——每日最新資訊28at.com

4b. 列表成對循環

在某些情況下,你需要成對地遍歷一個列表,這意味著你需要訪問一個對象及其周圍的對象。sLk28資訊網——每日最新資訊28at.com

為此,可以寫出以下代碼:sLk28資訊網——每日最新資訊28at.com

vals = [1, 2, 3, 4]for i in range(len(vals) - 1):    print((vals[i], vals[i + 1]))# 輸出:# (1, 2)# (2, 3)# (3, 4)

這種方法效果很好,但既不容易閱讀,也不明確它的作用。sLk28資訊網——每日最新資訊28at.com

這就是 Python 3.10 引入的 pairwise() 函數派上用場之處!讓我們看看如何簡化代碼:sLk28資訊網——每日最新資訊28at.com

from itertools import pairwisevals = [1, 2, 3, 4]for pair in pairwise(vals):    print(pair)# 輸出:# (1, 2)# (2, 3)# (3, 4)

這是我們之前寫過的代碼的更明確的版本,可以立即理解代碼的目標。sLk28資訊網——每日最新資訊28at.com

itertools 庫為你提供了許多對于迭代對象非常有用的函數。知道何時應用這些函數真正將你的技能提升到另一個層次。sLk28資訊網——每日最新資訊28at.com

結論

掌握 Python 不僅僅是記住語法 —— 還需要擁抱優雅,知道何時平衡簡潔和可讀性。sLk28資訊網——每日最新資訊28at.com

記住 Python 的禪宗:sLk28資訊網——每日最新資訊28at.com

  • 優美勝于丑陋(Python 以編寫優美的代碼為目標)
  • 明了勝于晦澀(優美的代碼應當是明了的,命名規范,風格相似)
  • 簡潔勝于復雜(優美的代碼應當是簡潔的,不要有復雜的內部實現)
  • 復雜勝于凌亂(如果復雜不可避免,那代碼間也不能有難懂的關系,要保持接口簡潔)
  • 扁平勝于嵌套(優美的代碼應當是扁平的,不能有太多的嵌套)
  • 間隔勝于緊湊(優美的代碼有適當的間隔,不要奢望一行代碼解決問題)
  • 可讀性很重要(優美的代碼是可讀的)
  • 即便假借特例的實用性之名,也不可違背這些規則(這些規則至高無上)

本文鏈接:http://m.www897cc.com/showinfo-26-87502-0.html初學者易犯的四個Python錯誤!

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 為什么 Cloudflare 是 2024 年 Vercel 的最佳替代品?生態系統與價格比較

下一篇: JS世界的新星:探索除了Vue和React之外的“后起之秀”

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国一区二区在线观看| 精品成人在线观看| 久久综合色婷婷| 99re66热这里只有精品4| 国产一区二区三区精品欧美日韩一区二区三区 | av不卡免费看| 国产综合亚洲精品一区二| 国产精品成人免费视频 | 在线性视频日韩欧美| 亚洲第一伊人| 国产综合色一区二区三区| 欧美午夜精品理论片a级按摩| 美国三级日本三级久久99| 亚洲欧美高清| 日韩亚洲欧美中文三级| 亚洲激情在线激情| 国产真实乱偷精品视频免| 91久久夜色精品国产九色| 亚洲综合成人在线| 蜜臀va亚洲va欧美va天堂| 国产精品美女在线观看| 欧美日韩另类在线| 欧美激情亚洲激情| 亚洲女性裸体视频| 久热精品在线| 猛男gaygay欧美视频| 欧美日韩精品在线视频| 国产真实精品久久二三区 | 久久久综合网站| 欧美一区精品| 午夜精品久久久久久久白皮肤| 一区二区久久久久| 野花国产精品入口| 久久精品视频在线播放| 久久久久久亚洲精品中文字幕| 久久久最新网址| 国产精品国产三级国产a| 欧美性理论片在线观看片免费| 欧美日韩p片| 欧美三级在线| 国产精品女人毛片| 国产精品一区2区| 国产色视频一区| 樱桃成人精品视频在线播放| 精品成人一区二区三区| 亚洲一区日韩| 亚洲中无吗在线| 欧美亚洲日本网站| 欧美一区二区三区在线播放| 欧美在线视频全部完| 欧美日韩裸体免费视频| 欧美性开放视频| 国产精品美女主播| 国产一区二区在线免费观看| 亚洲美女尤物影院| 亚洲免费一级电影| 欧美伦理在线观看| 国产欧美一区二区三区沐欲| 国产亚洲欧洲997久久综合| 亚洲福利免费| 欧美在线视频导航| 国产精品乱码| 激情五月婷婷综合| 亚洲三级免费| 亚洲视频axxx| 欧美在线亚洲一区| 国产精品免费看片| 狠狠色狠狠色综合日日91app| 亚洲欧美日韩专区| 麻豆精品视频在线观看| 国产在线国偷精品产拍免费yy| 亚洲免费在线播放| 久久亚洲一区二区三区四区| 欧美日韩国产综合一区二区| 国产精品久久久久久av下载红粉| 亚洲精品美女在线| 欧美一区二区三区免费视频| 国产精品国产三级国产| 一区二区三区回区在观看免费视频| 久久精品最新地址| 欧美精品自拍| 亚洲精品日韩欧美| 欧美影院成人| 国产日韩欧美一区二区三区在线观看 | 在线欧美三区| 亚洲视频久久| 欧美日韩综合在线免费观看| 精品999成人| 亚洲一区二区三区色| 猫咪成人在线观看| 在线不卡欧美| 欧美怡红院视频| 国产在线精品一区二区中文| 久久久久久久一区二区三区| 国产精品久久久久久久免费软件| 亚洲天堂男人| 欧美电影免费观看| 国产一区二区三区四区hd| 久久精品网址| 亚洲国产精品第一区二区三区 | 欧美在线亚洲一区| 欧美日韩国产小视频在线观看| 日韩一级网站| 猛男gaygay欧美视频| 国产精品一区二区你懂得| 欧美在线一二三区| 在线电影一区| 欧美淫片网站| 国产精品视频| 在线一区视频| 国产精品视频福利| 久久国产毛片| 国产伦精品一区二区三区免费 | 国产一区二区三区黄| 久久亚洲春色中文字幕久久久| 亚洲欧洲日产国码二区| 欧美体内谢she精2性欧美| 欧美一区二区黄色| 亚洲国产精品成人综合色在线婷婷 | 国产精品高清在线| 久久国产直播| 亚洲人成人99网站| 免费看亚洲片| 亚洲高清一区二| 欧美日韩亚洲高清一区二区| 亚洲欧美中文日韩在线| 国产精品久久久爽爽爽麻豆色哟哟| 午夜精品福利在线观看| 在线免费精品视频| 国产精品hd| 老司机久久99久久精品播放免费| 极品尤物一区二区三区| 欧美精品国产精品| 欧美一区二区三区男人的天堂 | 亚洲午夜久久久| 狠狠色狠狠色综合人人| 久久精品国产亚洲一区二区三区 | 久久精品国产久精国产爱| 国产午夜亚洲精品羞羞网站| 亚洲欧美日本在线| 亚洲福利免费| 国产女精品视频网站免费| 午夜免费日韩视频| 国产欧美一区二区精品秋霞影院| 欧美一区2区视频在线观看 | 久久久久五月天| 亚洲一区二区三区色| 亚洲国内自拍| 欧美精品一区二区三区在线播放| 亚洲欧美日本在线| 国产三区精品| 欧美日韩mv| 亚洲午夜精品久久| 亚洲国产日韩在线| 欧美日本国产视频| 久久久www| 亚洲一区自拍| 亚洲人成在线观看| 欧美午夜精品一区二区三区| 久久日韩精品| 亚洲欧洲在线视频| 国模吧视频一区| 国产精品你懂的在线| 欧美日韩国产天堂| 另类av一区二区| 欧美在线一级视频| 激情久久久久久久| 国产精品一区久久久| 亚洲精品美女91| 在线观看国产精品淫| 国产香蕉久久精品综合网| 久久久人人人| 亚洲免费在线视频| 99精品欧美一区| 最新成人在线| 国产精品久久久久aaaa九色| 欧美精品 国产精品| 久久天堂成人| 久久国产日韩| 欧美亚洲网站| 亚洲国产欧美一区二区三区久久 | 亚洲免费电影在线观看| 亚洲成人影音| 樱桃国产成人精品视频| 韩国成人精品a∨在线观看| 国产欧美日韩精品专区| 国产精品久久波多野结衣| 欧美日韩在线综合| 欧美日韩国产经典色站一区二区三区| 女女同性精品视频| 一区二区三区鲁丝不卡| 国产亚洲欧美一区| 国产精品视区| 国产精品免费在线| 国产精品人人爽人人做我的可爱| 欧美视频第二页| 久久久蜜桃一区二区人| 久久成人精品一区二区三区| 性久久久久久久久久久久| 亚洲欧美日韩另类精品一区二区三区| 亚洲图片欧美日产| 亚洲一区二区精品在线| 亚洲午夜羞羞片| 亚洲国产精品小视频|