如何系統(tǒng)的自學(xué)Python

Python的系統(tǒng)的自學(xué),其實(shí)應(yīng)該分成兩塊:

  • Python本身語言語法的學(xué)習(xí)
  • Python在特定應(yīng)用場景相關(guān)庫和場景知識的學(xué)習(xí),比如機(jī)器學(xué)習(xí)方面,辦公自動化,Web后端變成,網(wǎng)絡(luò)編程,桌面圖形界面等等

打個通俗的例子,你完全會漢語的語法和單詞,也能流利的用漢語表達(dá)自己感受和想法,但是找一篇現(xiàn)代數(shù)學(xué)的論文或者一篇前言醫(yī)學(xué)的論文,雖然字你都認(rèn)識,漢語的語法你也完全看的懂,但是這樣的現(xiàn)代數(shù)學(xué)或者醫(yī)學(xué)的論文,如果你沒有相關(guān)的知識,你從頭看到尾,你還是完全不理解這些論文究竟在說啥。

同樣的,Python是一門計算機(jī)語言,它為人類和計算機(jī)交流發(fā)明的,Python定義一種語言的語法和規(guī)則,讓你用這樣的“語言”描述自己的想法的時候,計算機(jī)就會理解你的意思,并按照你的要求執(zhí)行。

比如用Python寫出下面的代碼,也就是相當(dāng)于你朝計算機(jī)喊“給我輸出100次Hello",之所以我們現(xiàn)在需要用Python告訴計算機(jī)我們的想法,而不是直接用漢語告訴計算機(jī),是因?yàn)闈h語也好,英語也好,其他人類的語言也好,一方面不嚴(yán)謹(jǐn),模糊信息太多,計算機(jī)難以理解,另一方面,人類的語言冗余信息太多,也不效率(你懂得,人類大部分交流,很多話都是在扯淡,沒有信息含量),希望人工智能的進(jìn)步讓未來的計算機(jī)能直接理解人類心中的想法:

for i in range(100):
    print("Hello")

所以,回到如何系統(tǒng)的自學(xué)Python, 其實(shí)也要分成兩塊看:

  • 如何系統(tǒng)的自學(xué)的Python語言語法
  • 如何系統(tǒng)自學(xué)的Python各種應(yīng)用場景,比如數(shù)據(jù)分析,網(wǎng)絡(luò)編程,Web編程,圖像處理,桌面圖形界面程序,機(jī)器學(xué)習(xí)等等各種場景

如何系統(tǒng)的自學(xué)的Python語言語法

Python語言語法這塊不是很復(fù)雜,任何入門級的Python教程書都有,并且官方文檔就自帶了一份中文的教程,在你安裝Python本機(jī)就有,也可以直接在官網(wǎng)網(wǎng)站上看到:

Python 教程 - Python 3.8.3 文檔?docs.python.org

這個文檔就已經(jīng)詳細(xì)把Python語言和語法說的很清楚,包括幾個Python語言最重要的幾部分:

  • 流程控制( If, for, while)
  • 數(shù)據(jù)結(jié)構(gòu)(數(shù)字,字符串,列表,字典等)
  • 模塊
  • 異常
  • 常用標(biāo)準(zhǔn)庫

官方3.8版本的文檔一共16章,總共也沒多少字,對Python語言和語法方方面面的內(nèi)容也都有相應(yīng)的代碼,仔仔細(xì)細(xì)照著敲一遍,反反復(fù)復(fù)聯(lián)系幾遍,就和剛學(xué)一門外語的,不要糾結(jié)太多,就是要多”說“,對于Python而言,就是要反復(fù)“說”給計算機(jī)聽。

盡量給自己一點(diǎn)高強(qiáng)度練習(xí),讓自己反復(fù)習(xí)慣用Python表達(dá)自己的想法,慢慢的你就有用Python和計算機(jī)交流的感覺了,這時候Python語言和語法你也基本系統(tǒng)學(xué)了一遍,也基本都有理解了。

如何系統(tǒng)自學(xué)的Python各種應(yīng)用場景

首先,要明白一點(diǎn),Python應(yīng)用場景涉及計算機(jī)的方方面面,并沒有必要系統(tǒng)的全部學(xué)一遍,要根據(jù)你的實(shí)際需求來,就像你會漢語,但是也沒有必要把漢語用的所有方面都學(xué)一遍,沒見過幾個會說普通的話,嘗試去寫宋詞元曲的,對吧。

所以,根據(jù)你的需求來看,你需要學(xué)習(xí)Python那個應(yīng)用場景,這種情況下,根據(jù)每個人情況,也要分兩種:

  • 本身已具備相關(guān)應(yīng)用場景的專業(yè)知識
  • 本身不具備相關(guān)應(yīng)用場景的專業(yè)知識

比如,如果你本人就是數(shù)學(xué)系或者統(tǒng)計系的,對數(shù)據(jù)分析的相關(guān)數(shù)據(jù)概念很清楚,你去學(xué)習(xí)Python數(shù)據(jù)科學(xué)的相關(guān)庫(Numpy,Pandas,statsmodels,Skt-learn等),你會覺得非常輕松,因?yàn)槟銓I(yè)上學(xué)到一些專業(yè)知識和算法,已經(jīng)被人用Python都包裝好了,只要你會Python的語言語法,都可以輕松調(diào)用。

又比如你本來就已經(jīng)熟悉用Qt來開發(fā)桌面圖形界面程序,這時候,你用PyQt5或者PySide,你同樣會覺得非常簡單,也談不上自學(xué)成本,十分鐘了解下這些庫的用法,馬上就可以上手。

但是,大部分人的情況,是本身不具備相關(guān)應(yīng)用場景的專業(yè)知識,比如學(xué)習(xí)Django/Flash的,是第一次接觸Web編程,學(xué)習(xí)PyTorch/Keras的人,也是第一次接觸神經(jīng)網(wǎng)絡(luò),與其說是想系統(tǒng)的自學(xué)的Python,比如是說想借Python的語言學(xué)習(xí)Web開發(fā)/數(shù)據(jù)分析/機(jī)器學(xué)習(xí)/圖像處理。。。。

對于這種情況,建議是,根據(jù)你自己的需求,盡快找到你所對應(yīng)Pyhon的庫,而且通常要找包裝的比較簡單的庫,沒太多細(xì)節(jié)的的庫,比如說,學(xué)深度學(xué)習(xí),先從包裝成最簡單的Keras,先用起來,比如說從來沒接觸過Web后端開發(fā),先用最簡單的Flask開始,而且要盡快直接用最簡單的庫,先跑起來,先動起來,因?yàn)槟惚旧頉]有這塊的基礎(chǔ)知識,而Python這些庫,恰恰能讓你很快入手,盡快直觀了解這方便的知識,比如你原來不理解什么是神經(jīng)網(wǎng)絡(luò),那就直接先用Keras照例子寫個手寫體,先跑起來再說,再看看找下傳統(tǒng)的算法,例如用Skt-learn也寫個手寫體識別,兩個不同的算法一起跑起來對比下,你對神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí),立刻就不會覺得神秘,會有直接的認(rèn)識。

import numpy as np
np.random.seed(1337)  # for reproducibility
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Conv2D, MaxPooling2D,AveragePooling2D
from keras.utils import np_utils
from keras import backend as K
import MNIST
# 全局變量  
batch_size = 128  # 批處理樣本數(shù)量
nb_classes = 10  # 分類數(shù)目
epochs = 600  # 迭代次數(shù)
img_rows, img_cols = 28, 28  # 輸入圖片樣本的寬高
nb_filters = 32  # 卷積核的個數(shù)
pool_size = (2, 2)  # 池化層的大小
kernel_size = (5, 5)  # 卷積核的大小
input_shape = (img_rows, img_cols,1)  # 輸入圖片的維度
X_train, Y_train = MNIST.get_training_data_set(600, False)  # 加載訓(xùn)練樣本數(shù)據(jù)集,和one-hot編碼后的樣本標(biāo)簽數(shù)據(jù)集。最大60000
X_test, Y_test = MNIST.get_test_data_set(100, False)  # 加載測試特征數(shù)據(jù)集,和one-hot編碼后的測試標(biāo)簽數(shù)據(jù)集,最大10000
X_train = np.array(X_train).astype(bool)    # 轉(zhuǎn)成0-1黑白圖。方便訓(xùn)練
X_train=X_train[:,:,:,np.newaxis]  # 添加一個維度,代表圖片通道。這樣數(shù)據(jù)集共4個維度,樣本個數(shù)、寬度、高度、通道數(shù)
Y_train = np.array(Y_train)
X_test = np.array(X_test).astype(bool)    # 轉(zhuǎn)成0-1黑白圖。方便訓(xùn)練
X_test=X_test[:,:,:,np.newaxis]  # 添加一個維度,代表圖片通道。這樣數(shù)據(jù)集共4個維度,樣本個數(shù)、寬度、高度、通道數(shù)
Y_test = np.array(Y_test)
print('樣本數(shù)據(jù)集的維度:', X_train.shape,Y_train.shape)
print('測試數(shù)據(jù)集的維度:', X_test.shape,Y_test.shape)
print(MNIST.printimg(X_train[1]))
print(Y_train[1])
model = Sequential()
model.add(Conv2D(6,kernel_size,input_shape=input_shape,strides=1))  # 卷積層1
model.add(AveragePooling2D(pool_size=pool_size,strides=2))  # 池化層
model.add(Conv2D(12,kernel_size,strides=1))  # 卷積層2
model.add(AveragePooling2D(pool_size=pool_size,strides=2))  # 池化層
model.add(Flatten())  # 拉成一維數(shù)據(jù)
model.add(Dense(nb_classes))  # 全連接層2
model.add(Activation('sigmoid'))  # sigmoid評分
model.compile(loss='categorical_crossentropy',optimizer='adadelta',metrics=['accuracy'])
model.fit(X_train, Y_train, batch_size=batch_size, epochs=epochs,verbose=1, validation_data=(X_test, Y_test))
score = model.evaluate(X_test, Y_test, verbose=0)
print('Test score:', score[0])
print('Test accuracy:', score[1])

最后總結(jié)下,所謂系統(tǒng)自學(xué)Python,很多時候,很多人指的是系統(tǒng)的學(xué)習(xí)Python應(yīng)用在XXX方面,而不是指Python語言本身,這時候,如果沒有相關(guān)方面的知識,最好的辦法,從Python包裝的使用難度最低的庫入手,盡快讓自己對具體知識有了具體的理解,想學(xué)深度學(xué)習(xí),盡快用Keras搭建自己的第一個神經(jīng)網(wǎng)絡(luò),想學(xué)爬蟲,先用requests抓第一個網(wǎng)頁信息,想開發(fā)Web,先用Flask搭一個網(wǎng)站,當(dāng)你通過Python把這個應(yīng)用方面或者專業(yè)的知識理解透了,用其他語言C/C++/JAV去做,對你來說也是豁然開朗的感覺,立刻動手立刻去做立刻去理解,除此之外,再無法他發(fā)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容