久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

仔細(xì)看這幾段代碼,看看你是Python新鳥還是老鳥

 美好生活谷 2019-03-09

在 Python Shell 里輸入 import this

這段話被稱作“Python 之禪”(The Zen of Python),,它列舉了一些 Python 所推崇的理念,,比如:

優(yōu)美勝于丑陋

明確勝于隱晦

簡(jiǎn)單勝于復(fù)雜

可讀性很重要

不要忽略錯(cuò)誤

面對(duì)不確定時(shí),拒絕猜測(cè)

現(xiàn)在做好過不做,,但盲目動(dòng)手不如不做

如果你的實(shí)現(xiàn)很難說清楚,,那是個(gè)壞想法;反之亦然

仔細(xì)看這幾段代碼,,看看你是Python新鳥還是老鳥

當(dāng)你學(xué)完基礎(chǔ),,可以寫點(diǎn)代碼的時(shí)候,可能經(jīng)常感覺自己的實(shí)現(xiàn)很別扭,。有經(jīng)驗(yàn)的程序員會(huì)一眼看出你的代碼出自一個(gè)初學(xué)者之手,。這就是我們經(jīng)常說的,代碼不夠 pythonic,。

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

仔細(xì)看這幾段代碼,,看看你是Python新鳥還是老鳥

Python 基礎(chǔ) 數(shù)據(jù)分析 框架 機(jī)器學(xué)習(xí) 算法 等一系列

比如來實(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)化程序,、提高可讀性的語(yǔ)法,我們稱之為“語(yǔ)法糖”(Syntactic sugar),。Python 中類似的例子還有不少,,來舉幾個(gè):

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

temp = a a = b b = temp

pythonic 寫法:

a, b = b, a

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

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

pythonic 寫法:

def func(a, b): return b, a x, 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 += l print(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è)語(yǔ)句中,這反倒不 pythonic 了,。所以,,我們需要有一些設(shè)計(jì)的原則,但又不必拘泥于具體的形式,,否則就鉆入牛角尖了,。

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

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

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

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

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多