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

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

四個Python初學者式的錯誤及其優化建議

來源: 責編: 時間:2024-06-05 17:45:28 138觀看
導讀Python是一種非常容易學習的語言,而且它不會強迫你使用特定的慣例。但它也很容易陷入一些誤區,讓你看起來像個初學者。為了避免看起來像個完全的初學者,請查看下面的提示以及如何解決這些問題。1. 不使用enumerate()Pyth

Python是一種非常容易學習的語言,而且它不會強迫你使用特定的慣例。但它也很容易陷入一些誤區,讓你看起來像個初學者。為了避免看起來像個完全的初學者,請查看下面的提示以及如何解決這些問題。lUn28資訊網——每日最新資訊28at.com

1. 不使用enumerate()

Python使得遍歷諸如列表之類的事物變得非常容易。讓我們看看下面的示例:lUn28資訊網——每日最新資訊28at.com

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

但是,如果你需要引用每個項目的索引,該怎么辦呢?你可能已經遇到或者甚至編寫了類似下圖所示的代碼:lUn28資訊網——每日最新資訊28at.com

vals = ['Python', 'is', 'fun!']for i in range(len(vals)):  print(i, vals[i])# Returns:# 0 Python# 1 is# 2 fun!

這種方法雖然可行,但它并不優雅。它也不能立即清楚地說明你的代碼在做什么。lUn28資訊網——每日最新資訊28at.com

這就是enumerate()函數的用武之地!讓我們看看它如何使這個過程變得更加簡單:lUn28資訊網——每日最新資訊28at.com

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

作為一個專業提示,你甚至可以改變起始值。比如說,你想從1開始標記項目,那么你可以這樣簡單地寫:lUn28資訊網——每日最新資訊28at.com

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語句來分配值時,你需要編寫很多行代碼來完成一個簡單的操作。請看下面的場景:lUn28資訊網——每日最新資訊28at.com

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

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

雖然我們的代碼很干凈,但并不簡潔。我們可以通過使用三元賦值來大大簡化它:lUn28資訊網——每日最新資訊28at.com

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

這種方法最適用于非常簡單的作業。雖然可以做得更復雜,但不要為了簡潔而犧牲可讀性。lUn28資訊網——每日最新資訊28at.com

3. 使用推導式

3.1 不使用推導式

Python推導式使創建列表、字典和生成器變得輕而易舉。它們提供了一種優雅且易讀的方式來輕松創建數據結構。lUn28資訊網——每日最新資訊28at.com

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

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

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

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

我們可以看到使用列表推導式要簡單和明確得多!代碼不僅更簡潔,而且也更容易閱讀。lUn28資訊網——每日最新資訊28at.com

創建字典推導式也同樣簡單。讓我們再次比較這兩種方法,創建一個字典,其中鍵是原始數字,值是它的平方:lUn28資訊網——每日最新資訊28at.com

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

現在,讓我們看看如何通過字典推導式來簡化這一過程。lUn28資訊網——每日最新資訊28at.com

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

現在,過度使用推導式也是一個問題。所以在這里有一個額外的提示:除非有必要,否則不要什么都用它們。lUn28資訊網——每日最新資訊28at.com

3.2 過度使用推導式

Python推導式非常強大。你可以內置復雜的if-else語句,甚至可以將它們嵌套在彼此之中。lUn28資訊網——每日最新資訊28at.com

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

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']

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

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

這絕對不是什么有趣、可讀的東西。這就引出了這里的重點——如果推導式比使用for循環更不清晰,那就不要寫推導式。lUn28資訊網——每日最新資訊28at.com

讓我們將這個推導式轉換為一個循環,看看它變得有多易讀:lUn28資訊網——每日最新資訊28at.com

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

可以看到,雖然我們用了更多行來編寫這段代碼,但它的可讀性卻大大提高了。lUn28資訊網——每日最新資訊28at.com

4. 不使用itertools

Python的itertools是內置于Python中的一個函數庫。雖然表面上看,它的許多函數似乎很簡單,但它們提供了優雅而強大的方式來遍歷不同的對象。lUn28資訊網——每日最新資訊28at.com

4.1 避免嵌套循環

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

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

與我們在本文中介紹的其他方法類似,這種方法雖然有效,但并不優雅。lUn28資訊網——每日最新資訊28at.com

值得慶幸的是,itertools提供了product()函數,它可以創建所有項目的笛卡爾積。這意味著我們可以在一個for循環中直接解包這些值,代碼如下所示:lUn28資訊網——每日最新資訊28at.com

from itertools import productcolors = ['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

可以看到這種方法簡單多了。lUn28資訊網——每日最新資訊28at.com

4.2 成對遍歷列表

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

要做到這一點,可以編寫以下代碼:lUn28資訊網——每日最新資訊28at.com

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)

這種方法效果很好,但可讀性不強,其作用也不是很明確。lUn28資訊網——每日最新資訊28at.com

這就是Python 3.10引入的pairwise()函數的用武之地。讓我們看看如何簡化代碼:lUn28資訊網——每日最新資訊28at.com

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

這是我們之前編寫的代碼的一個更加明確的版本,使我們能夠立即了解代碼的目的。lUn28資訊網——每日最新資訊28at.com

itertools庫為用戶提供了許多有用的對象迭代函數。知道何時應用這些函數可以將你的技能提升到更高的層次。lUn28資訊網——每日最新資訊28at.com

結論

掌握Python不僅僅是記住語法,更重要的是擁抱優雅,并知道何時在簡潔和可讀性之間取得平衡。lUn28資訊網——每日最新資訊28at.com

牢記Python之禪:lUn28資訊網——每日最新資訊28at.com

Beautiful is better than ugly.lUn28資訊網——每日最新資訊28at.com

Explicit is better than implicit.lUn28資訊網——每日最新資訊28at.com

Simple is better than complex.lUn28資訊網——每日最新資訊28at.com

Complex is better than complicated.lUn28資訊網——每日最新資訊28at.com

Flat is better than nested.lUn28資訊網——每日最新資訊28at.com

Sparse is better than dense.lUn28資訊網——每日最新資訊28at.com

Readability counts.lUn28資訊網——每日最新資訊28at.com

上述提示應能真正幫助你領悟Python之禪的這一開始的幾行。lUn28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-92153-0.html四個Python初學者式的錯誤及其優化建議

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

上一篇: 萬字聊一聊RocketMQ一條消息短暫而又精彩的一生

下一篇: 詳解51種企業應用架構模式

標簽:
  • 熱門焦點
  • 5月安卓手機好評榜:魅族20 Pro奪冠

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年5月1日至5月31日,僅限國內市場。第一名:魅族20 Pro好評率:97.50%不得不感慨魅族老品牌還
  • 從 Pulsar Client 的原理到它的監控面板

    背景前段時間業務團隊偶爾會碰到一些 Pulsar 使用的問題,比如消息阻塞不消費了、生產者消息發送緩慢等各種問題。雖然我們有個監控頁面可以根據 topic 維度查看他的發送狀態,
  • 讓我們一起聊聊文件的操作

    文件【1】文件是什么?文件是保存數據的地方,是數據源的一種,比如大家經常使用的word文檔、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存數據,它既可以保
  • 三言兩語說透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是兩種很有用的技術,可以幫助我們寫出更加優雅、泛用的函數。本文將首先介紹柯里化和反柯里化的概念、實現原理和應用
  • 2天漲粉255萬,又一賽道在抖音爆火

    來源:運營研究社作者 | 張知白編輯 | 楊佩汶設計 | 晏談夢潔這個暑期,旅游賽道徹底火了:有的「地方」火了——貴州村超旅游收入 1 個月超過 12 億;有的「博主」火了&m
  • Android 14發布:首批適配機型公布

    5月11日消息,谷歌在今天凌晨舉行了I/O大會,本次發布會谷歌帶來了自家的AI語言模型PaLM 2、谷歌Pixel Fold折疊屏、谷歌Pixel 7a手機,同時發布了Androi
  • 英特爾Xe HPG游戲顯卡:擁有512EU,單風扇版本

    據10 月 30 日外媒 TheVerge 消息報道,英特爾 Xe HPG Arc Alchemist 的正面實被曝光,不僅擁有 512 EU 版顯卡,還擁有 128EU 的單風扇版本。另外,這款顯卡 PCB
  • 親歷馬斯克血洗Twitter,硅谷的苦日子在后頭

    文/劉哲銘  編輯/李薇  馬斯克再次揮下裁員大刀。  美國時間11月14日,Twitter約4400名外包員工遭解雇,此次被解雇的員工的主要工作為內容審核等。此前,T
  • 利用職權私自解除被封帳號 Meta開除20多名員工

    11月18日消息,據外媒援引知情人士表示,過去一年時間內,Facebook母公司Meta解雇或處罰了20多名員工以及合同工,指控這些人通過內部系統以不當方式重置用戶帳號,其
Top 主站蜘蛛池模板: 张家口市| 商洛市| 淄博市| 赤城县| 新蔡县| 定安县| 芦山县| 咸宁市| 册亨县| 信宜市| 宁阳县| 颍上县| 井研县| 浑源县| 涡阳县| 镇康县| 垣曲县| 宁夏| 剑阁县| 祥云县| 武山县| 丹阳市| 华容县| 雷波县| 桂林市| 清水县| 黄梅县| 应城市| 遵化市| 黄龙县| 腾冲县| 平昌县| 梅州市| 正定县| 东港市| 华坪县| 广宗县| 茶陵县| 永宁县| 监利县| 沙河市|