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

作為初學者應避免的四個常見 Python 錯誤

開發 前端
我將討論介紹性 Python 程序員常犯的四個錯誤。 在我早期的 Python 時代學習這些陷阱對我非常有幫助,我希望它也能對你有用。

Python 對于初學者來說是一門優秀的語言,但這并不意味著就不會犯錯誤。 尤其是在學習編程的早期階段,很容易編寫出技術上正確但風格上很差的代碼。

如果您要學習編碼,那么學好它是至關重要的。 無論是在學術界還是工業界,代碼的質量都很重要。 它不僅會影響您,還會影響將繼續閱讀和使用您的代碼的每一個人。 也許更自私的是,它還會影響您的招聘前景。

在本文中,我將討論介紹性 Python 程序員常犯的四個錯誤。 在我早期的 Python 時代學習這些陷阱對我非常有幫助,我希望它也能對你有用。

讓我們開始吧。

布爾條件語句

這是入門程序員常犯的錯誤。 這也是不那么入門的程序員所犯的錯誤,他們缺乏正式的編程背景,因為他們只是將代碼用作工具。 我在看著你,數據科學家。

Python 中的條件語句很有用,但并不總是必需的。 當您檢查的條件已經包含布爾值(真或假)時,尤其如此。

讓我用一個簡單的例子來說明。 假設我們要編寫代碼來確定一個數據集是否已經被清理過。 對我們來說幸運的是,代碼庫包含一個名為 is_data_clean 的方便變量,它可以跟蹤這一點。 我們需要做的就是檢查它并返回正確的值。

作為第一次嘗試,我們可能會編寫如下內容:

def a_function():
if is_data_clean == True:
return True
else:
return False

這已經可以運行了,但它不必如此復雜。 你看到問題了嗎? 仔細看。

變量 is_data_clean 已經是一個布爾值; 因此,它已經包含了您需要返回的值! 代碼檢查它是否為 True,然后返回 True,如果它不是 True(意味著它為 False),則代碼返回 False。 這只是一大堆不必要的檢查。

我們可以將函數中的代碼簡化為一行:

def a_function():
return is_data_clean

好多了。

手動求和、均值或其他內置操作

Python 具有比大多數人意識到的更多的內置功能。 仍然使用循環來手動計算總和的人數實在是太多了。

如果我們在 Python 中有一個數字列表,我們絕對不應該像這樣計算總和:

total = 0
for num in numbers_list:
total += num

請改用內置的求和函數:

total

需要最小值還或最大值? 全宇宙都禁止你寫這樣的代碼:

import math
minimum = math.inf # 從最高可能值開始
for number in numbers_list:
if number < minimum:
minimum = number

這不是介紹性的計算機科學原理課程; 這是真實的世界。 停止重新發明輪子并使用內置的 min 和 max 函數:

minimum = min(numbers_list)
maximum

?有關內置函數的完整列表,請參閱 Python 文檔

獎勵:技術上不是內置的內置功能。

有些功能很難找到,但這并不意味著您不應該找到它們。

例如,如果我們需要一列數字?的平均值(您可能會感覺到這是反復出現的主題),我們可以使用下面的第一個代碼片段,但我們應該使用第二個:

# 片段 1:不要這樣做!
total = 0
for num in numbers_list:
total += num
avg = total / len(numbers_list)

# 片段 2:這樣做!
import numpy as np
avg = np.mean(numbers_list)

通常,Python 會在模塊中提供有用的函數。 定位我們需要的模塊并導入函數可能需要一些額外的工作,但非常值得。

請記住 — Python 就是簡單性和可讀性。 內置函數是你的朋友。 與你的人類朋友不同,他們永遠不會讓人失望。

不做無意義的事情

在我教授的一門 Python 入門課程中,學生的第一個項目是編寫一個簡單的決策算法。 這主要是一個條件練習,要求學生定義一個問題和相關的評分系統,以確定某人有資格回答這個問題的可能性。

例如,有人可能會問,“我應該成為一名數據科學家嗎?” 然后,該算法可能包含以下問題,所有這些問題都會根據答案從最終輸出分數中增加或減少:

  • 我是否有興趣使用數據來深入了解世界?
  • 我愿意學習 Python 嗎?
  • 我喜歡與多學科團隊合作嗎?

等等。

在編寫算法的過程中,許多學生意識到在某些情況下,他們根本不想對總分做任何事情。 例如,他們可能會決定,如果有人愿意學習 Python,那么他們的總分會增加 10 分,但如果他們不愿意,則分數保持不變。

大多數學生使用以下代碼實現它:

# willing_to_lean 是一些基于用戶輸入的預定義變量
if willing_to_learn:
score += 10
else:
score += 0

這是什么都不做的經典案例。 讓我們分解一下 Python 在看到代碼行 score += 0 時必須執行的所有操作:

  • 它需要查找變量 score 的值。
  • 它需要將 0 添加到該值。 這需要調用加法函數,傳入兩個參數(當前值和 0),并計算輸出。
  • 將 score 變量重新分配給新值(顯然是相同的)。

所有這些代碼什么都不做。

當然,這對計算機來說不是很大的工作量,也不會對代碼的效率產生任何有意義的影響。 也就是說,它毫無意義,而且有些不干凈,這是優秀 Python 代碼所不具備的特征。

更好的解決方案是使用 Python 的 pass 關鍵字,它實際上告訴 Python 什么都不做,繼續前進。 它填充了一行不需要的代碼,但如果完全留空就會出錯。 我們甚至可以添加一點評論以提供進一步的清晰度:

if willing_to_learn:
score += 10
else:
pass # 保持分數不變

更干凈、更清晰、更 Pythonic。

單一的條件變得瘋狂

條件語句可以說是標準編程中最強大和一致的結構之一。 第一次學習它時,很容易忽略一個重要的微妙之處。

當我們要檢查兩個或多個條件時,就會出現這種情況。 例如,假設我們正在審查一項調查,以獲取以下三種形式之一的回答:“Yes”、“No”或“Maybe”。

早期的 Python 程序員通常使用以下兩種方式之一對此進行編碼:

# 可能 1
if response == "Yes":
# do something
if response == "No":
# do something
if response == "Maybe":
# do something

# 可能 2
if response == "Yes":
# do something
elif response == "No":
# do something
else:
# do something

在這種情況下,這兩個代碼片段實際上是相同的。 它們的行為方式相同,理解起來并不特別混亂,并且它們實現了預期的目標。 當人們錯誤地認為上面的兩個結構總是等價時,問題就出現了。

這是錯誤的。 上面的第二個代碼片段是由多個部分組成的單個條件表達式,而第一個代碼片段由三個獨立的條件表達式組成,盡管它們看起來是相互關聯的。

為什么這很重要? 因為每當 Python 看到一個全新的 if 關鍵字(即一個新的條件表達式開始)時,它就會檢查關聯的條件。 另一方面,如果當前條件表達式中的先前條件不滿足,Python 只會輸入 elif 或 else 條件。

讓我們看一個例子,看看為什么這很重要。 假設我們需要編寫代碼,根據學生在某項作業中的分數給他們打分。 我們在Python 文件中寫入以下代碼:

score = 76

print("SNIPPET 1")
print()

if score < 100:
print('A')
elif score < 90:
print('B')
elif score < 80:
print('C')
elif score < 70:
print('D')
else:
print('F')

print()
print("SNIPPET 2")
print()

if score < 100:
print('A')
if score < 90:
print('B')
if score < 80:
print('C')
if score < 70:
print('D')
if score < 60:
print('F')

運行此代碼輸出以下內容:

SNIPPET 1
A
SNIPPET 2
A
B
C

你看得到差別嗎? 在第二種情況下,我們得到了意想不到的輸出。 為什么? 因為 Python 將每個 if 語句作為一個新的條件來讀取,所以如果一個分數恰好小于多個數字檢查,則會為所有這些打印出相應的字母等級。

現在,有多種方法可以使用多個 if 語句; 例如,我們可以讓條件檢查范圍而不僅僅是上限。 這個例子的重點不是爭論一個例子優于另一個例子(盡管為了清楚起見,我個人傾向于使用 elif 和 else),而只是為了說明它們是不一樣的。

確保你明白這一點。

最后的想法和回顧

這是您的 Python 初學者備忘單:

  1. 當您可以簡單地直接返回布爾值時,不要為布爾值設置不必要的條件。
  2. 內置函數是您最好的朋友。
  3. 如果您需要告訴 Python 什么都不做,請使用 pass 關鍵字。
  4. 確保正確構造條件表達式,理解 if 、 elif 和 else 關鍵字的含義。

你決定學習 Python 真是太好了——我向你保證,這門語言會對你很好。

責任編輯:姜華 來源: 今日頭條
相關推薦

2024-05-08 12:41:29

Python編程語言

2024-06-04 00:00:06

Python初學者優化

2022-10-19 23:18:27

KubernetesPod錯誤

2022-07-22 15:55:32

Python代碼語言

2011-01-11 08:45:17

JavaScript

2015-12-21 11:45:27

C語言常見問題錯誤

2013-02-20 10:13:38

JavaJava初學者

2021-01-11 09:13:55

UbuntuLinux發行版

2020-01-14 17:31:46

數據科學誤區人工智能

2025-04-07 01:35:00

Go語言程序

2024-08-17 12:14:06

2019-06-11 09:52:18

IPv6IPv4程序

2024-03-11 18:17:18

Python字符串分隔符

2020-09-06 08:19:11

Python編程語言開發

2019-08-29 08:58:24

Python布爾型編程語言

2020-08-25 10:14:59

JavaScript開發 技巧

2011-04-06 14:42:25

Delphi

2011-09-16 09:38:19

Emacs

2022-04-24 15:21:01

MarkdownHTML

2011-04-12 10:13:24

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲视频在线一区 | 二区成人| 成人免费看黄网站在线观看 | www国产成人免费观看视频,深夜成人网 | 精品免费| 日韩av在线播 | 一区中文 | 色综合久久天天综合网 | 国产一区二区精品在线 | 日韩精品久久一区二区三区 | 日本在线黄色 | 亚洲天堂中文字幕 | 五月激情综合网 | 亚洲视频区 | 国产一区二区精品在线 | 日韩精品视频一区二区三区 | 精品日韩在线 | 在线一区| 欧美一区二区三区在线 | 日韩成人在线网址 | 一区二区三区精品视频 | 欧美二区三区 | 国产成人精品一区二区三区视频 | 伦理一区二区 | 国产偷久久一级精品60部 | a欧美 | 中文字幕精品视频在线观看 | 精品一二三 | 久久久久国产精品一区二区 | 午夜久久av| 亚洲黄色在线 | 亚洲精品乱码久久久久久久久久 | 欧日韩在线观看 | av网址在线 | 日韩欧美在线免费观看 | 国产美女黄色片 | 免费观看www7722午夜电影 | 成人做爰9片免费看网站 | 色播视频在线观看 | 一级看片 | 色婷婷久久久亚洲一区二区三区 |