溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么寫好的Python代碼

發(fā)布時(shí)間:2021-11-20 16:36:06 來源:億速云 閱讀:125 作者:iii 欄目:編程語言

本篇內(nèi)容介紹了“怎么寫好的Python代碼”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

所謂 pythonic,我覺得包含兩方面:一是代碼的風(fēng)格符合 Python 的特點(diǎn),能合理使用 Python 的“語法糖”;二是代碼簡(jiǎn)潔優(yōu)美,穩(wěn)定性高,可讀性好,便于維護(hù)和修改。所謂“Python 之禪”并不僅限于 Python,很多理念是編程普適的。

比如來實(shí)現(xiàn)對(duì)一個(gè)列表中元素的遍歷訪問,我見過很多次有人這么寫:

for i in range(len(lst)): print(lst[i])

這樣的同學(xué)很可能是之前有過 C/C++ 或 Java 的經(jīng)驗(yàn)。這么寫功能上沒問題,但不夠簡(jiǎn)潔,不夠 pythonic。更好的實(shí)現(xiàn)方式:

for i in lst: print(i)

這種不影響功能,但能簡(jiǎn)化程序、提高可讀性的語法,我們稱之為“語法糖”(Syntactic sugar)。Python 中類似的例子還有不少,來舉幾個(gè):

1、交換兩個(gè)變量的值,普通寫法:

temp = aa = bb = temp

pythonic 寫法:

a, b = b, a

2、類似的解包(unpacking)用法還可以實(shí)現(xiàn)多個(gè)返回值的函數(shù)。普通寫法:

def func(a, b): result = [b, a]
 return resultr = func(a, b)x = r[0]y = r[1]

pythonic 寫法:

def func(a, b): return b, ax, y = func(a, b)

3、讀寫文件,普通寫法:

f = open('filename.txt')text = f.read()print(text)f.close()

pythonic 寫法:

with open('filename.txt') as f:
 for line in f: print(line)

with 的好處是即使出錯(cuò),也會(huì)幫你關(guān)閉文件。

4、拼接字符串,普通寫法:

letters = ['h', 'e', 'l', 'l', 'o']s = ''for l in letters: s += lprint(s)

pythonic 寫法:

print(''.join(letters))

5、關(guān)于前面遍歷列表的例子,如果你想帶上索引,可以這么寫:

for i, elem in enumerate(lst): print(i, elem)

遍歷字典項(xiàng):

for key, value in dct.items(): print(key, value)

6、取出列表中大于 0 的元素,生成新列表。普通寫法:

new_lst = []
for i in lst:
 if i > 0: new_lst.append(i)

pythonic 寫法:

new_lst = [i for i in lst if i > 0]

這個(gè)被稱為“列表解析式”(List comprehension,中文翻譯說法有很多),可以說是非常 pythonic 的一個(gè)用法了。

更進(jìn)一步,如果數(shù)據(jù)量很大,而你對(duì)新列表僅僅是遍歷操作,并不需要一個(gè)列表對(duì)象,可以采用生成器:

new_lst = (i for i in lst if i > 0)
for i in new_lst: print(i)

這樣會(huì)更節(jié)省資源,提升執(zhí)行效率。

7、判斷一個(gè)值是否為True、是否為空列表、是否是None,普通寫法:

if x == True:
 pass
if len(y) == 0:
 pass
if z == None:
 pass

pythonic 寫法:

if x:
 pass
if not y:
 pass
if z is None:
 pass

8、根據(jù)鍵名獲取字典中對(duì)應(yīng)的值,普通寫法:

value = dct[key]

這樣的問題在于,如果 key 不存在,代碼就報(bào)錯(cuò)跳出。于是你不得不增加更多的判斷。

pythonic 寫法:

value = dct.get(key, 0)

改用 get 方法,不存在時(shí)會(huì)得到 None,或者指定的默認(rèn)值(這里是 0)。

篇幅所限,以上僅僅是一些比較具有代表性的例子。但凡事要有度,過分追求 pythonic 的寫法也可能導(dǎo)致代碼的可讀性下降。比如有人喜歡把很多功能寫在一個(gè)語句中,這反倒不 pythonic 了。所以,我們需要有一些設(shè)計(jì)的原則,但又不必拘泥于具體的形式,否則就鉆入牛角尖了。

那么對(duì)于學(xué)習(xí)者來說,如何才能寫出更 pythonic 的代碼呢?說到底還是個(gè)經(jīng)驗(yàn)積累的過程,菜鳥不可能看本書、上個(gè)課就一夜變成老鳥,但只要堅(jiān)持得夠久就可以。我這邊給幾個(gè)建議:

  1. 多看??垂俜綆?、優(yōu)秀項(xiàng)目,學(xué)習(xí)別人的代碼。以及看一些優(yōu)質(zhì)的教程和經(jīng)驗(yàn)分享,

  2. 多搜。當(dāng)你實(shí)現(xiàn)一個(gè)小功能后,去網(wǎng)上搜一下,別人是怎么寫的,對(duì)比下是不是比你自己的更好。舉個(gè)例子:如何從列表中刪除重復(fù)元素。你自己可以通過循環(huán)實(shí)現(xiàn),但只要搜一下,就會(huì)知道 list(set(x)) 這種用法。

  3. 多寫。自己還沒寫幾行代碼,就先別糾結(jié)什么效率什么風(fēng)格了。最終還是要寫上足夠量的代碼,才會(huì)有“悟道”的那一刻。

“怎么寫好的Python代碼”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI