十個(gè)Python初學(xué)者常犯的錯(cuò)誤
下面10個(gè)Python初學(xué)者常犯的錯(cuò)誤,并不是真正的代碼錯(cuò)誤,代碼照樣可以運(yùn)行,但是不夠Pythonic,因?yàn)镻ython有自己的語(yǔ)言哲學(xué),在代碼的處理上有傳統(tǒng)語(yǔ)言無(wú)法比擬的簡(jiǎn)潔性和便捷性。
1. 真值比較
初學(xué)者經(jīng)常在if語(yǔ)句中使用==比較符來(lái)判斷表達(dá)式是否為真值。
這是一種冗余的寫(xiě)法,其實(shí)你可以直接對(duì)變量進(jìn)行檢查。
2 . 字符串連接
很多初學(xué)者教程中,他們會(huì)告訴你字符串連接直接使用+操作符。
一種更優(yōu)雅的寫(xiě)法是使用f-string方式,將變量放置在{} 中,該方法能讓代碼清晰易讀,因?yàn)槟悴恍枰槍?duì)非字符串變量做強(qiáng)制轉(zhuǎn)換了。
3. open()、close()與上下文管理器
操作文件時(shí),下面的代碼看起來(lái)可讀性很好,打開(kāi)文件、編輯文件、關(guān)閉文件。不過(guò)在最后你總要是手動(dòng)去調(diào)用close方法來(lái)關(guān)閉文件。
其實(shí)python提供了內(nèi)置的上下文管理器,操作文件時(shí),使用with關(guān)鍵字操作文件,這樣就不需要自己處理文件的關(guān)閉操作了,在離開(kāi)上下文前管理器會(huì)自動(dòng)幫你關(guān)閉文件。
4. 檢查列表是否為空
假設(shè)你要基于列表做某些操作,操作前需要判斷列表是否為空,初學(xué)者通常會(huì)使用len方法判斷列表的長(zhǎng)度是否為0,并做后續(xù)操作。
有經(jīng)驗(yàn)的開(kāi)發(fā)者會(huì)告訴你,一種更好的方式是直接用列表本身來(lái)判斷列表是否為空
5. 字典中獲取key和value
如果你要列出并打印字典中所有元素,首先你要拿到每個(gè)元素的key,然后通過(guò)key來(lái)獲取對(duì)應(yīng)的value。初學(xué)者通常將兩個(gè)步驟分開(kāi)處理。
更便捷的方法是,字典的items()方法會(huì)返回一個(gè)由(key,value)元組構(gòu)成的迭代對(duì)象,
6. 解構(gòu)賦值
元組在python中是一種固定長(zhǎng)度的數(shù)據(jù)結(jié)構(gòu),新手在將元組中的元素賦值給多個(gè)不同的變量時(shí),他們通常的做法是從元組中逐個(gè)賦值給變量
更好的做法是直接在一行代碼中用解構(gòu)的方式,將元組同時(shí)賦值給多個(gè)不同的變量。
7. 列表迭代
對(duì)于新手來(lái)說(shuō),用for循環(huán)迭代列表中的元素時(shí),他們通常的做法是先拿到列表的長(zhǎng)度,然后通過(guò)元素的下標(biāo)索引來(lái)獲取值。
其實(shí)更專(zhuān)業(yè)的做法就是直接迭代列表本身,每次迭代出來(lái)的值就是列表中的元素
8. 一個(gè)索引用于多個(gè)列表
假設(shè)你想將兩個(gè)列表中的值做加操作,通常,你會(huì)從索引0開(kāi)始循環(huán)直到列表的結(jié)尾,每次循環(huán)將列表項(xiàng)做加操作組成新的列表
python提供了一個(gè)更好的方法zip(),它將兩個(gè)列表對(duì)象重新組合成一個(gè)成對(duì)出現(xiàn)的tuple元素列表
9. 海象操作符
在python3.8之前,當(dāng)一個(gè)變量作用在if判斷語(yǔ)句上時(shí),要先給他賦值然后再處理
python3.8的海象操作符,讓你的代碼減少重復(fù),看起來(lái)更簡(jiǎn)潔,你可以將變量的賦值和if判斷一行處理。
10. 不必要的索引
如果有一個(gè)文本列表,你想隨下標(biāo)索引一起打印,可以你單獨(dú)定義一個(gè)數(shù)字變量每次迭代的時(shí)候遞增1
一個(gè)更為專(zhuān)業(yè)的做法是直接用enumerate()方法,每次迭代時(shí),他會(huì)返回元素的下標(biāo)索引和元素本身