成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

對比幾段代碼,看看你是 Python 菜鳥還是老鳥

dingding199389 / 1301人閱讀

摘要:最終還是要寫上足夠量的代碼,才會有悟道的那一刻。另外,對于代碼本身,有一套書寫規(guī)范,叫做。

Python 里有個小彩蛋:

在 Python Shell 里輸入 import this

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

優(yōu)美 勝于丑陋  
明確 勝于隱晦
簡單 勝于復(fù)雜

可讀性 很重要
不要忽略 錯誤
面對不確定時, 拒絕猜測
現(xiàn)在做 好過不做,但盲目動手不如不做
如果你的實(shí)現(xiàn)很難說清楚,那是個壞想法;反之亦然

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

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

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


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

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


for i in lst:
    print(i)

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

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


temp = a
a = b
b = temp

pythonic 寫法:


a, b = b, a

2、類似的解包(unpacking)用法還可以實(shí)現(xiàn)多個返回值的函數(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 的好處是即使出錯,也會幫你關(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]

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

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


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

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

7、判斷一個值是否為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ù)鍵名獲取字典中對應(yīng)的值,普通寫法:


value = dct[key]

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

pythonic 寫法:


value = dct.get(key, 0)

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

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

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

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

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

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

另外,對于代碼本身,Python 有一套書寫規(guī)范,叫做 PEP8 。里面約定了很多細(xì)節(jié),比如哪里該空格、注釋怎么寫、什么地方該換行、如何命名等等。鏈接:https://www.python.org/dev/peps/pep-0008/,網(wǎng)上還有翻譯好的中文版,務(wù)必找時間看一看。

最后,留2個小作業(yè):

1. 判斷 一個列表 A 是否為另一個列表 B 的“子集” ,也就是列表 A 中的元素是否都在列表 B 中。  
2. 計(jì)算 1 加到 100 的和 。
盡可能寫出你認(rèn)為 pythonic 的代碼。

════

其他文章及回答:

學(xué)編程:如何自學(xué)Python | 新手引導(dǎo) | 一圖學(xué)Python

開發(fā)案例:智能防擋彈幕 | 紅包提醒 | 流浪地球

歡迎搜索及關(guān)注: Crossin的編程教室

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/43288.html

相關(guān)文章

  • 大話-node真的是單線程嗎?

    摘要:當(dāng)你使用的活動監(jiān)視器你會發(fā)現(xiàn),實(shí)際的進(jìn)程數(shù)為菜鳥是因?yàn)榫€程池的原因嗎老鳥不錯嘛,還知道線程池呢但非也非也。菜鳥竟然不是線程池老鳥你忽視了集成了引擎。啟動后會創(chuàng)建實(shí)例,而實(shí)例是多線程的。 老鳥:伸著懶腰,看著窗外明媚的陽光,喝一口清茶,心情大美。一天的好心情莫過于此。老鳥:菜鳥,你這消失了大半個月,忙什么呢?菜鳥:聽說node最近很火,這不趁著年輕,多儲存點(diǎn)知識儲備呢!老鳥:那你說說你對...

    Yang_River 評論0 收藏0
  • 大話-URL和URI的區(qū)別和聯(lián)系

    摘要:此時這個通訊地址就是,若干年后,小明可能已經(jīng)搬家了,無論小明的家庭搬去了任何地方,但是這個地址不會變,你仍然可以去八阿哥路號,但是你卻找不到小明了。同時身份證不會發(fā)生變化,通過身份證我們唯一確認(rèn)小明,這就是統(tǒng)一資源標(biāo)識符。 2019年6月15日,菜鳥坐在電腦桌前,喝著咖啡,唱著歌,心情大美。寫了一個博客《程序員的前世與今生》。正巧,大鳥從他身邊路過,貓了一眼,覺得不錯,就跟菜鳥說:菜鳥...

    gaomysion 評論0 收藏0
  • ??爆肝十二萬字《python從零到精通教程》,從零教你變大佬??(建議收藏)

    文章目錄 強(qiáng)烈推薦系列教程,建議學(xué)起來??! 一.pycharm下載安裝二.python下載安裝三.pycharm上配置python四.配置鏡像源讓你下載嗖嗖的快4.1pycharm內(nèi)部配置 4.2手動添加鏡像源4.3永久配置鏡像源 五.插件安裝(比如漢化?)5.1自動補(bǔ)碼神器第一款5.2漢化pycharm5.3其它插件 六.美女背景七.自定義腳本開頭八、這個前言一定要看九、pyt...

    booster 評論0 收藏0
  • 利用小基助手瀏覽器插件和小程序可隨時關(guān)注基金收益數(shù)據(jù)

    摘要:如果我們有需要安裝的話可以選擇直接小程序搜索小基助手進(jìn)行安裝。第二小基助手推薦優(yōu)勢老蔣個人覺得這款基金管理軟件還是不錯的。我們?nèi)粘9芾碜约豪碡?cái)投資的基金是用什么軟件呢?直接在銀行、券商平臺或者支付寶直接買入后每天看看收益即可,基本上不做分析和對比,大部分是根據(jù)別人說不錯,然后就去選擇。包括在后續(xù)如果有波動的時候我們跟庫自己的理性、非理性、智慧選擇減倉、定投或者拋售。 實(shí)際上如果我們需要...

    張漢慶 評論0 收藏0

發(fā)表評論

0條評論

dingding199389

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<