偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

作為初學(xué)者應(yīng)避免的四個(gè)常見(jiàn) Python 錯(cuò)誤

開(kāi)發(fā) 前端
我將討論介紹性 Python 程序員常犯的四個(gè)錯(cuò)誤。 在我早期的 Python 時(shí)代學(xué)習(xí)這些陷阱對(duì)我非常有幫助,我希望它也能對(duì)你有用。

Python 對(duì)于初學(xué)者來(lái)說(shuō)是一門(mén)優(yōu)秀的語(yǔ)言,但這并不意味著就不會(huì)犯錯(cuò)誤。 尤其是在學(xué)習(xí)編程的早期階段,很容易編寫(xiě)出技術(shù)上正確但風(fēng)格上很差的代碼。

如果您要學(xué)習(xí)編碼,那么學(xué)好它是至關(guān)重要的。 無(wú)論是在學(xué)術(shù)界還是工業(yè)界,代碼的質(zhì)量都很重要。 它不僅會(huì)影響您,還會(huì)影響將繼續(xù)閱讀和使用您的代碼的每一個(gè)人。 也許更自私的是,它還會(huì)影響您的招聘前景。

在本文中,我將討論介紹性 Python 程序員常犯的四個(gè)錯(cuò)誤。 在我早期的 Python 時(shí)代學(xué)習(xí)這些陷阱對(duì)我非常有幫助,我希望它也能對(duì)你有用。

讓我們開(kāi)始吧。

布爾條件語(yǔ)句

這是入門(mén)程序員常犯的錯(cuò)誤。 這也是不那么入門(mén)的程序員所犯的錯(cuò)誤,他們?nèi)狈φ降木幊瘫尘?,因?yàn)樗麄冎皇菍⒋a用作工具。 我在看著你,數(shù)據(jù)科學(xué)家。

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

讓我用一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明。 假設(shè)我們要編寫(xiě)代碼來(lái)確定一個(gè)數(shù)據(jù)集是否已經(jīng)被清理過(guò)。 對(duì)我們來(lái)說(shuō)幸運(yùn)的是,代碼庫(kù)包含一個(gè)名為 is_data_clean 的方便變量,它可以跟蹤這一點(diǎn)。 我們需要做的就是檢查它并返回正確的值。

作為第一次嘗試,我們可能會(huì)編寫(xiě)如下內(nèi)容:

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

這已經(jīng)可以運(yùn)行了,但它不必如此復(fù)雜。 你看到問(wèn)題了嗎? 仔細(xì)看。

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

我們可以將函數(shù)中的代碼簡(jiǎn)化為一行:

def a_function():
return is_data_clean

好多了。

手動(dòng)求和、均值或其他內(nèi)置操作

Python 具有比大多數(shù)人意識(shí)到的更多的內(nèi)置功能。 仍然使用循環(huán)來(lái)手動(dòng)計(jì)算總和的人數(shù)實(shí)在是太多了。

如果我們?cè)?Python 中有一個(gè)數(shù)字列表,我們絕對(duì)不應(yīng)該像這樣計(jì)算總和:

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

請(qǐng)改用內(nèi)置的求和函數(shù):

total

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

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

這不是介紹性的計(jì)算機(jī)科學(xué)原理課程; 這是真實(shí)的世界。 停止重新發(fā)明輪子并使用內(nèi)置的 min 和 max 函數(shù):

minimum = min(numbers_list)
maximum

?有關(guān)內(nèi)置函數(shù)的完整列表,請(qǐng)參閱 Python 文檔

獎(jiǎng)勵(lì):技術(shù)上不是內(nèi)置的內(nèi)置功能。

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

例如,如果我們需要一列數(shù)字?的平均值(您可能會(huì)感覺(jué)到這是反復(fù)出現(xiàn)的主題),我們可以使用下面的第一個(gè)代碼片段,但我們應(yīng)該使用第二個(gè):

# 片段 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 會(huì)在模塊中提供有用的函數(shù)。 定位我們需要的模塊并導(dǎo)入函數(shù)可能需要一些額外的工作,但非常值得。

請(qǐng)記住 — Python 就是簡(jiǎn)單性和可讀性。 內(nèi)置函數(shù)是你的朋友。 與你的人類(lèi)朋友不同,他們永遠(yuǎn)不會(huì)讓人失望。

不做無(wú)意義的事情

在我教授的一門(mén) Python 入門(mén)課程中,學(xué)生的第一個(gè)項(xiàng)目是編寫(xiě)一個(gè)簡(jiǎn)單的決策算法。 這主要是一個(gè)條件練習(xí),要求學(xué)生定義一個(gè)問(wèn)題和相關(guān)的評(píng)分系統(tǒng),以確定某人有資格回答這個(gè)問(wèn)題的可能性。

例如,有人可能會(huì)問(wèn),“我應(yīng)該成為一名數(shù)據(jù)科學(xué)家嗎?” 然后,該算法可能包含以下問(wèn)題,所有這些問(wèn)題都會(huì)根據(jù)答案從最終輸出分?jǐn)?shù)中增加或減少:

  • 我是否有興趣使用數(shù)據(jù)來(lái)深入了解世界?
  • 我愿意學(xué)習(xí) Python 嗎?
  • 我喜歡與多學(xué)科團(tuán)隊(duì)合作嗎?

等等。

在編寫(xiě)算法的過(guò)程中,許多學(xué)生意識(shí)到在某些情況下,他們根本不想對(duì)總分做任何事情。 例如,他們可能會(huì)決定,如果有人愿意學(xué)習(xí) Python,那么他們的總分會(huì)增加 10 分,但如果他們不愿意,則分?jǐn)?shù)保持不變。

大多數(shù)學(xué)生使用以下代碼實(shí)現(xiàn)它:

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

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

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

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

當(dāng)然,這對(duì)計(jì)算機(jī)來(lái)說(shuō)不是很大的工作量,也不會(huì)對(duì)代碼的效率產(chǎn)生任何有意義的影響。 也就是說(shuō),它毫無(wú)意義,而且有些不干凈,這是優(yōu)秀 Python 代碼所不具備的特征。

更好的解決方案是使用 Python 的 pass 關(guān)鍵字,它實(shí)際上告訴 Python 什么都不做,繼續(xù)前進(jìn)。 它填充了一行不需要的代碼,但如果完全留空就會(huì)出錯(cuò)。 我們甚至可以添加一點(diǎn)評(píng)論以提供進(jìn)一步的清晰度:

if willing_to_learn:
score += 10
else:
pass # 保持分?jǐn)?shù)不變

更干凈、更清晰、更 Pythonic。

單一的條件變得瘋狂

條件語(yǔ)句可以說(shuō)是標(biāo)準(zhǔn)編程中最強(qiáng)大和一致的結(jié)構(gòu)之一。 第一次學(xué)習(xí)它時(shí),很容易忽略一個(gè)重要的微妙之處。

當(dāng)我們要檢查兩個(gè)或多個(gè)條件時(shí),就會(huì)出現(xiàn)這種情況。 例如,假設(shè)我們正在審查一項(xiàng)調(diào)查,以獲取以下三種形式之一的回答:“Yes”、“No”或“Maybe”。

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

# 可能 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

在這種情況下,這兩個(gè)代碼片段實(shí)際上是相同的。 它們的行為方式相同,理解起來(lái)并不特別混亂,并且它們實(shí)現(xiàn)了預(yù)期的目標(biāo)。 當(dāng)人們錯(cuò)誤地認(rèn)為上面的兩個(gè)結(jié)構(gòu)總是等價(jià)時(shí),問(wèn)題就出現(xiàn)了。

這是錯(cuò)誤的。 上面的第二個(gè)代碼片段是由多個(gè)部分組成的單個(gè)條件表達(dá)式,而第一個(gè)代碼片段由三個(gè)獨(dú)立的條件表達(dá)式組成,盡管它們看起來(lái)是相互關(guān)聯(lián)的。

為什么這很重要? 因?yàn)槊慨?dāng) Python 看到一個(gè)全新的 if 關(guān)鍵字(即一個(gè)新的條件表達(dá)式開(kāi)始)時(shí),它就會(huì)檢查關(guān)聯(lián)的條件。 另一方面,如果當(dāng)前條件表達(dá)式中的先前條件不滿(mǎn)足,Python 只會(huì)輸入 elif 或 else 條件。

讓我們看一個(gè)例子,看看為什么這很重要。 假設(shè)我們需要編寫(xiě)代碼,根據(jù)學(xué)生在某項(xiàng)作業(yè)中的分?jǐn)?shù)給他們打分。 我們?cè)赑ython 文件中寫(xiě)入以下代碼:

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

運(yùn)行此代碼輸出以下內(nèi)容:

SNIPPET 1
A
SNIPPET 2
A
B
C

你看得到差別嗎? 在第二種情況下,我們得到了意想不到的輸出。 為什么? 因?yàn)?Python 將每個(gè) if 語(yǔ)句作為一個(gè)新的條件來(lái)讀取,所以如果一個(gè)分?jǐn)?shù)恰好小于多個(gè)數(shù)字檢查,則會(huì)為所有這些打印出相應(yīng)的字母等級(jí)。

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

確保你明白這一點(diǎn)。

最后的想法和回顧

這是您的 Python 初學(xué)者備忘單:

  1. 當(dāng)您可以簡(jiǎn)單地直接返回布爾值時(shí),不要為布爾值設(shè)置不必要的條件。
  2. 內(nèi)置函數(shù)是您最好的朋友。
  3. 如果您需要告訴 Python 什么都不做,請(qǐng)使用 pass 關(guān)鍵字。
  4. 確保正確構(gòu)造條件表達(dá)式,理解 if 、 elif 和 else 關(guān)鍵字的含義。

你決定學(xué)習(xí) Python 真是太好了——我向你保證,這門(mén)語(yǔ)言會(huì)對(duì)你很好。

責(zé)任編輯:姜華 來(lái)源: 今日頭條
相關(guān)推薦

2024-05-08 12:41:29

Python編程語(yǔ)言

2024-06-04 00:00:06

Python初學(xué)者優(yōu)化

2022-10-19 23:18:27

KubernetesPod錯(cuò)誤

2022-07-22 15:55:32

Python代碼語(yǔ)言

2011-01-11 08:45:17

JavaScript

2015-12-21 11:45:27

C語(yǔ)言常見(jiàn)問(wèn)題錯(cuò)誤

2013-02-20 10:13:38

JavaJava初學(xué)者

2021-01-11 09:13:55

UbuntuLinux發(fā)行版

2020-01-14 17:31:46

數(shù)據(jù)科學(xué)誤區(qū)人工智能

2025-04-07 01:35:00

Go語(yǔ)言程序

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編程語(yǔ)言開(kāi)發(fā)

2019-08-29 08:58:24

Python布爾型編程語(yǔ)言

2011-04-06 14:42:25

Delphi

2020-08-25 10:14:59

JavaScript開(kāi)發(fā) 技巧

2011-04-12 10:13:24

2011-08-24 09:54:05

Lua字符春交互

2011-09-16 09:38:19

Emacs
點(diǎn)贊
收藏

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