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

分享

如何學(xué)習(xí)一門新語言:以 Python 為例

 達(dá)坂城大豆 2017-11-01

語言在不斷變化,新語言不斷被發(fā)明出來,,老語言也在不斷添加新特性,。作為以編程語言謀生的程序員來說,學(xué)會如何學(xué)習(xí)一門新語言可以說是必備技能,。


本文由作者陳少文授權(quán)發(fā)布,,總結(jié)了他學(xué)習(xí) Python、進(jìn)行 Django 開發(fā)一年來的經(jīng)驗(yàn),,轉(zhuǎn)載請聯(lián)系原文作者授權(quán),。

文 | 陳少文

1. 了解新語言產(chǎn)生的背景

ABC 是專門為非專業(yè)程序員設(shè)計(jì)的一種教學(xué)語言,但是由于其封閉,,并未取得成功,。1989年的圣誕節(jié)期間,,吉多·范羅蘇姆開發(fā)了一個(gè)新的腳本解釋器,并命名為 Python,,作為 ABC 語言的一種繼承,。新的腳本解釋器開放,完美結(jié)合了 Unix Shell 和 C 的使用習(xí)慣,。

2. 了解新語言應(yīng)用的場景

  • 網(wǎng)站后臺 有大量成熟的框架,,如 Django,F(xiàn)lask,,Tornado

  • 網(wǎng)絡(luò)爬蟲 Python 寫爬蟲有很多庫可用,,如 Scrapy,Beautiful Soup

  • 科學(xué)計(jì)算 可以替代 R 語言和 Matlab,,如 NumPy, SciPy, Matplotlib, Pandas

  • 數(shù)據(jù)挖掘,,機(jī)器學(xué)習(xí),大數(shù)據(jù) Scikit-learn,,Libsvm,,TensorFlow

  • 系統(tǒng)部署,運(yùn)維腳本 Shell 適合簡單的系統(tǒng)管理工作,,但涉及復(fù)雜的自動化任務(wù)還是需要 Python,。

3. 了解新語言的特點(diǎn)

Python 的設(shè)計(jì)哲學(xué)是:優(yōu)雅、明確,、簡單,。Python 的開發(fā)哲學(xué)是:用一種方法,最好是只有一種方法來做一件事,,有些類似 Unix,。與其他語言非常不一樣的是,Python 以縮進(jìn)來確定語句塊,。

Python 是一門面向?qū)ο蟮膭討B(tài),、解釋型語言,具有出色的模塊化特性,。同時(shí),,Python 擁有大量的第三方開源包,,可以直接使用,,極大地提高了開發(fā)效率。Python 編寫的代碼,,可讀性強(qiáng),,特別適合多人大型項(xiàng)目的開發(fā)。但是 Python 的執(zhí)行效率比不上 C/C++ 這類編譯型語言,。

4. 學(xué)習(xí)新語言的數(shù)據(jù)結(jié)構(gòu)

Python 中內(nèi)置類型有整型 int,,浮點(diǎn)型 float,,布爾型 bool,字符串 str,,列表 list,,元組 tuple,字典 dict,,集合 set,。與 C 不同的是,Python 并不依賴于關(guān)鍵字定義各種類型,。Python 是動態(tài)強(qiáng)類型語言,,是通過運(yùn)行時(shí),自動選擇合適的數(shù)據(jù)類型,。字符串,、列表、元組,、集合,、字典等復(fù)雜數(shù)據(jù)類型,并不是 C 語言的內(nèi)置類型,。

5. 學(xué)習(xí)新語言的邏輯結(jié)構(gòu)

if 條件判斷結(jié)構(gòu)

  1. condition = 1

  2. if condition == 1:

  3.    print 1

  4. elif condition == 2:

  5.    print 2

  6. else:

  7.    print 3

for 循環(huán)結(jié)構(gòu)

  1. items = ['item1', 'item2', 'item3']

  2. for item in items:

  3.    print item

while 循環(huán)結(jié)構(gòu)

  1. sum, n = 0, 10

  2. while n > 0:

  3.    sum = sum + n

  4.    n = n - 2

  5. print sum

Keywords: if; for; while;

6. 學(xué)習(xí)定義一個(gè)獨(dú)立模塊

定義函數(shù):

  1. def function_name(x):

  2.    return -x

定義類:

  1. class ClassName:            #經(jīng)典類,、舊類

  2.    def __init__(self):

  3.        pass

  4. class NewClassName(object):    #新類

  5.    def __init__(self):

  6.        pass

  7. # 在多繼承中,新式類采用廣度優(yōu)先搜索,,而舊式類是采用深度優(yōu)先搜索,。

定義包:

Python 中定義一個(gè)包,只需要在文件夾里面,,創(chuàng)建一個(gè) init.py文件即可,,如:

  1. mypackage/__init__.py

  2. mypackage/test.py

  3. mypackage/views.py

那么在其他文件中,就可以通過 from mypackage import views 的語法,,從 mypackage 這個(gè)包里面導(dǎo)入 views ,。

7. 做一個(gè)小的項(xiàng)目

嘗試完成一次領(lǐng)域?qū)嵺`,是對這個(gè)領(lǐng)域最佳的入門方式,。學(xué)習(xí)一門新的編程語言,,成長最快的階段在,利用這門編程語言完成項(xiàng)目需求期間,。

Django 是一個(gè)十分優(yōu)秀的 Python 寫的 Web 程序框架,,廣泛用于數(shù)據(jù)驅(qū)動類的網(wǎng)站開發(fā)。Django 是一個(gè)大而全的開發(fā)框架,,基本不需要額外的第三方配置,,就可以快速地進(jìn)行開發(fā)。

筆者的小項(xiàng)目需求是:利用二維碼掃碼,,查看在線簡歷,。

確定項(xiàng)目需求之后,,會迎來一個(gè)手足無措的時(shí)期,不知道從哪里著手開始做項(xiàng)目,。如果有一個(gè)過來人指導(dǎo)一下,,那么很快就能開始編碼了。不幸的是,,筆者當(dāng)時(shí)身邊并沒有這樣一個(gè)人,。在網(wǎng)上查閱資料后,最終選定了Jquery ,、Foundation,、Django 實(shí)現(xiàn)這個(gè)項(xiàng)目。

實(shí)際上,,筆者在此之前一直在寫 C++ 程序,,并沒有 Python 的編程基礎(chǔ),僅僅是因?yàn)檫@個(gè)小項(xiàng)目,,選定的技術(shù)棧后臺使用的是 Django ,,才開始學(xué)習(xí) Python。

除了掌握項(xiàng)目使用到的技術(shù)棧,,在完成項(xiàng)目的過程中,,還可以解鎖調(diào)試技能、通過搜索引擎解決各種程序問題的能力,。

為了完成這個(gè)小項(xiàng)目,,需要走出舒適區(qū),突破原有的技術(shù)棧,,最終獲得快速的技術(shù)成長,。

8. 學(xué)習(xí)使用庫完成任務(wù)

通常,發(fā)布者會將使用頻率高,、可以復(fù)用的功能,,打包成庫,提供給大家共同使用,。

庫可以分為兩類:

  • 一種是官方的庫,,通常質(zhì)量比較高、會維護(hù)更新,;

  • 一種是第三方的庫,,質(zhì)量參差不齊,需要自己甄別,。

例如,,Django 中提供了 from django.views.decorators.http import require_POST 裝飾器用于確保 view 函數(shù)的請求方法是 POST。使用這個(gè)裝飾器可以簡化 view 函數(shù)中的條件判斷,,有利于編寫簡潔易讀的代碼,。當(dāng)然 ,Django 還有大量的第三方 App可以下載使用,,直接提供一個(gè)完整功能,。

在項(xiàng)目開發(fā)的過程中,合理地使用庫會起到錦上添花的效果,。

9. 學(xué)習(xí)組織代碼結(jié)構(gòu)

研究怎樣更好的組織項(xiàng)目的代碼是一門管理科學(xué),。筆者之前也寫過相關(guān)的文章 討論了 Django 工程的目錄組織結(jié)構(gòu)。

好的項(xiàng)目代碼結(jié)構(gòu)需要學(xué)習(xí)一些高關(guān)注度的開源項(xiàng)目的經(jīng)驗(yàn),,也需要注意輸出,,成為大家共同的標(biāo)準(zhǔn),共同維護(hù),,產(chǎn)生影響力,。

10. 學(xué)習(xí)讓代碼易維護(hù)

代碼維護(hù)分為兩類:

Bug 易修復(fù),需要代碼具有良好的命名習(xí)慣,、注釋,、日志輸出,實(shí)現(xiàn)相同的功能編寫盡量少的代碼 新功能的擴(kuò)展,,通常是在原有邏輯上,,創(chuàng)建新的分支。這類分支又可以分為代碼級別和常量級別,。我們需要的是通過常量的配置擴(kuò)展新功能,,而減少代碼級別的修改

11. 提高代碼復(fù)用率

隨著使用新語言年限的增長,參與項(xiàng)目的增多,,會出現(xiàn)一個(gè)顯而易見的問題:在不同的項(xiàng)目中,,會有一些非常類似的功能。甚至在開發(fā)新項(xiàng)目時(shí),,有時(shí)還會去以前項(xiàng)目中拷貝代碼,。

這時(shí),應(yīng)該思考如何提高代碼的復(fù)用率,,如何提供公共組件,。

代碼的復(fù)用可以分為:

  • 代碼片段(Snippets) 維護(hù)一個(gè) Snippets List 是個(gè)不錯的注意

  • 公共組件(Components) 公共組件需要從項(xiàng)目中分離,會有一定的工作量,,但收益很大

從項(xiàng)目中分離公共組件的過程,,需要關(guān)注模塊內(nèi)的高內(nèi)聚,模塊間的低耦合,。在模塊分離的過程中,,我們會更加深入地去理解應(yīng)用系統(tǒng)。這一過程的完成,又將極大地提高開發(fā)效率,。

更重要的是,,我們不僅僅從項(xiàng)目中分離出一個(gè)公共組件,在使用其他人提供的公共組件時(shí),,也會變得容易,。

下一次項(xiàng)目開發(fā)時(shí),需要一個(gè)新功能,,你首先想到的可能不是編碼,,而是去公共組件庫或 Github 搜索有沒有類似的包,然后經(jīng)過簡單的改造就能在項(xiàng)目使用,。

12. 關(guān)注性能

針對 Web 應(yīng)用,,高并發(fā)、高可用,、高一致性始終是亙古不變的議題,。在對應(yīng)用系統(tǒng)不斷發(fā)起挑戰(zhàn)時(shí),那些隱藏的曾經(jīng)被忽略的問題才會逐漸顯現(xiàn),。在這個(gè)過程中,,不斷地發(fā)現(xiàn)應(yīng)用系統(tǒng)的瓶頸,解決這些瓶頸,,循環(huán)往復(fù),,不斷加深對業(yè)務(wù)、對應(yīng)用系統(tǒng)的理解,。

性能報(bào)告是性能測試輸出的結(jié)果,。性能報(bào)告就像質(zhì)檢報(bào)告一樣,是讓用戶信任和使用產(chǎn)品的憑證,。高并發(fā),、高可用、高一致,,并不是口號,,需要數(shù)據(jù)的舉證,需要不斷的優(yōu)化性能,。

13. 源碼閱讀

閱讀源代碼有利于提高自己的代碼水平,。閱讀 Python 解釋器的源碼,有利于編寫高性能的代碼,。閱讀 Django 源碼有利于編寫易維護(hù),、易更新的 Django App。從開始學(xué)習(xí)這門新語言時(shí),,就可以開始嘗試閱讀源代碼,。


題圖:pexels,,CC0 授權(quán)。

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多