Python從入門到精通:老程序員速成記
.
1 深入接觸Python:功能特性和優(yōu)勢
-
作為有多年軟件開發(fā)經(jīng)驗的老程序員,即使沒有機會使用Python做軟件項目,也多少會接觸一點,形象的比喻:即使沒吃過豬肉,也應(yīng)該見過豬跑。而事實上,Python是一門被廣泛使用的編程語言,誕生于1991年,至于是誰發(fā)明的,感興趣的小伙伴可以自己去腦補一下。不同的編程語言,擅長的領(lǐng)域各不相同,Python主要擅長以下幾個方面:
(1)服務(wù)器端的網(wǎng)頁開發(fā)編程。
(2)普通的應(yīng)用軟件開發(fā)。
(3)數(shù)學(xué)計算。
(4)系統(tǒng)腳本。
(5)人工智能。
在具體的功能實現(xiàn)方面,Python可以做以下事情:
(1)在服務(wù)器端創(chuàng)建一個網(wǎng)頁應(yīng)用。
(2)連接數(shù)據(jù)庫以及讀寫文件。
(3)處理大數(shù)據(jù)做復(fù)雜的數(shù)學(xué)計算。
(4)分付的軟件開發(fā)包,快速提升軟件開發(fā)效率。

Python的這些功能特性,與這門編程語言的發(fā)展過程密不可分,從上圖其演進過程不難看出,其興起的1994年,計算機網(wǎng)絡(luò)和分布式計算已經(jīng)成為編程計算的趨勢,而作為面向未來的編程語言,其設(shè)計之初也充分考慮了這一點。為了完成一些軟件需求,我們選擇Python,還因為以下幾個原因:
(1)Python可以工作在不同的平臺上,包括Windows,Mac OS,Linux,樹莓派(Raspberry Pi)等等。
(2)Python的語法結(jié)構(gòu)很簡單,類似于英語的自然語言。
(3)Python的簡單語法結(jié)構(gòu)讓實現(xiàn)相同的功能,需要的代碼行數(shù)更少。
(4)Python是解釋型語言,寫好的代碼,可以立即執(zhí)行,制作項目原型非常方便。
(5)Python的開發(fā)方式靈活,可以面向過程,也可以面向?qū)ο?,同時也支持面向功能。
目前Python的主流版本是Python 3,但是依然有一些項目用Python 2。編寫Python可以直接使用文本編輯器,如果你對開發(fā)環(huán)境沒有特別要求,甚至可以直接使用Windows自帶的記事本。網(wǎng)上關(guān)于這方面種草的文章很多,也往往讓剛?cè)腴T的程序員不知道選擇哪個開發(fā)環(huán)境最好。根據(jù)筆者這樣的老程序員的經(jīng)驗,優(yōu)先選擇的是PyCharm,其次是VS Code,前者使用其社區(qū)版本(Community)即可,后者是小家子氣的微軟貢獻的免費軟件。
在語法結(jié)構(gòu)上,主流的其他的編程語言基本要通過分號或者是花括號來換行,而Python語言的換行符號就是用來標(biāo)志記一個程序指令執(zhí)行結(jié)束的。我們使用其他語言編寫一個函數(shù),基本上離不開class、function之類開頭和結(jié)束標(biāo)志, Python則直接使用每一行開始的留白和空格來表示,這些操作毫無疑問會提高我們寫代碼的效率。
.
2 理解Python的強大:結(jié)盟的重要性
-
上面說了Python語言的很多好處,那么我們?nèi)绾稳胧諴ython編程呢?
其實任何一門編程語言,大家想要實現(xiàn)從入門到精通,都要樹立一個意識:千里之行始于足下,老程序員走的路多,對于一條新的路,哪些地方可能會有坑,大多數(shù)情況下,會提前做出判斷,這是經(jīng)驗所發(fā)揮的作用。
我們學(xué)習(xí)Python編程,這幾個概念需要記?。?/p>
(1)編程語言的解釋器或編譯器:Python是解釋型語言,所以只要安裝解釋器就可以了,解釋器就是可以運行的python.exe,將這個文件所在文件夾放在操作系統(tǒng)可以找到路徑中。
(2)編程語言的語法:這是程序員和編程語言溝通的橋梁,如果不掌握語法,相當(dāng)于是你和這顯示器或編譯器無法溝通,因此,Python也不例外。最基礎(chǔ)的語法包括變量,數(shù)據(jù)類型,運算服務(wù)條件判斷語句函數(shù)和類的定義以及函數(shù)庫的引用。
(3)常用的軟件開發(fā)包和庫函數(shù):所謂的常用,主要包括和系統(tǒng)的交互,如查詢程序運行的操作系統(tǒng)的一些參數(shù)以及通過請求操作系統(tǒng)的接口,實現(xiàn)對文件的讀寫等操作,除了跟運行的操作系統(tǒng)的交互之外,我們還需要一些常用的輸入輸出函數(shù),特別是寫日志記錄的函數(shù),這方面往往被菜鳥程序員忽略。
除了以上三個基礎(chǔ)的概念之外,在Python中我們不得不說其豐富的擴展庫,這也是Python最引以為豪的地方,也是Python成為被廣泛使用的編程語言的主要原因之一??梢孕蜗蟮睦斫鉃椋阂粋€人的力量畢竟勢單力薄,但是你與很多人結(jié)盟,大家分別貢獻各自的力量,你有能力集合并運營,這才是真正的強大。Python就是這樣的,他的“強”,真正彰顯了結(jié)盟的重要性,具體的體現(xiàn),就是“擴展庫”。

上圖是一段簡單的Python代碼的截圖,雖然剛開個頭,我們已經(jīng)看到這段代碼引用很多強大的擴展庫,離開這些擴展庫,Python跟其他的編程語言也就沒有什么太大的區(qū)別了。
Python這門開發(fā)語言的擴展庫很多,比如我們平時使用頻率非常高的Web端的開發(fā)框架Flask和Django,用于數(shù)據(jù)處理的numpy和pandas,以及繪圖工具turtle(常常被用于少兒編程入門第一課必學(xué))。
Python這門編程語言更廣泛的應(yīng)用是在大數(shù)據(jù)處理和人工智能領(lǐng)域。Google早期對于人工智能領(lǐng)域的研究以及機器學(xué)習(xí)、神經(jīng)元智能感知的計算等,大多數(shù)都是使用Python語言編寫的,所以我們掌握了這門開發(fā)語言,在web3.0和元宇宙這樣的大趨勢背景下,可以更好的根據(jù)客戶需求,創(chuàng)建項目原型,快速迭代開發(fā)。
這些擴展庫為Python開發(fā)提供了豐富的可擴展框架,可以幫助我們快速搭建應(yīng)用軟件的基礎(chǔ)架構(gòu),降低數(shù)據(jù)庫連接以及增刪改查的代碼復(fù)雜度,有一些甚至優(yōu)化了緩存讀寫機制,以提高數(shù)據(jù)操作的效率。
基于以上內(nèi)容,老程序員要跟小伙伴們分享的基本就完成了,剩下的工作就是編寫Python代碼了。任何一門編程語言都是熟能生巧,在實際的項目開發(fā)和部署運營中不斷深入對其功能特性的理解。如果僅停留在教程和課程設(shè)計案例上,像Python這樣的開發(fā)語言,即使用了很久,可能還只是停留在表面,抓到一點皮毛而已。
.
3 Python的基礎(chǔ)語法和常用數(shù)據(jù)類型
-
以下這部分對于老司機來說幾乎忽略,如果不跟其他編程語言橫向?qū)Ρ鹊脑挕K赃@部分內(nèi)容建議閱讀的時候,根據(jù)各自的代碼編程經(jīng)驗,想一想相同的語法規(guī)則,例如函數(shù)、類等概念,在C++、Java、PHP、GO、C#等環(huán)境中是如何實現(xiàn)的。
3.1 函數(shù)的定義與調(diào)用
Python 定義函數(shù)使用 def 關(guān)鍵字,一般格式如下:
def 函數(shù)名(參數(shù)列表): ? ?
函數(shù)體
以下是一個具體的實例,我們先導(dǎo)入logging包,定義logit函數(shù)來代為實現(xiàn)logger.info的功能:
import logging def logit(log_info): ? ?
logger.info(log_info) #logit調(diào)用 logit('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')
調(diào)用logit輸出日志信息如下,其中的日期時間是有擴展庫logging自動生成的。
2023-04-14 10:48:17,738 [abot_tools.py - L:37] - INFO aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [__main__ - logit]
3.2 類的定義與調(diào)用
我們以類Abot_Config_Yaml為例來演示這個過程。
構(gòu)造函數(shù)設(shè)置self.filename和self.config兩個成員變量,方便在類里面和實例中調(diào)用這兩個變量;而類方法的定義,也是為了在類和實例中方便調(diào)用。
以下實例中,load_config類方法,實現(xiàn)讀取一個文件,把讀取出來的內(nèi)容傳給yaml對象,在構(gòu)造函數(shù)中定義的self.config成員變量,通過調(diào)用load_config類方法獲取值。
3.3 包和庫的引用
我們以JSON包來解釋這個過程,因為JSON數(shù)據(jù)在不同的編程語言和功能模塊中作為接口數(shù)據(jù)交換格式,已經(jīng)被廣泛應(yīng)用。引用json包后,我們使用json包中的loads函數(shù)將json格式的內(nèi)容轉(zhuǎn)換成python字典對象。
輸出值為字典對象:
3.4 列表、字典、元組和集合
Python代碼中,列表、字典、元組和集合是我們最常用四種數(shù)據(jù)類型,必須區(qū)分他們的區(qū)別。我們需要搞清楚在Python中的列表、字典、元組和集合四個概念的關(guān)系,才能更好的理解這門編程語言。這里主要通過代碼實例說明這4種數(shù)據(jù)類型的區(qū)別,至于這些鏈?zhǔn)浇Y(jié)構(gòu)的增刪改查,可以根據(jù)具體的使用場景再組織代碼。


3.4.1 列表
我們用[]初始化列表new_img_list,添加列表元素時調(diào)用append方法
輸出的內(nèi)容如下:
[{'seq': 1}, {'seq': 2}, {'seq': 3}]
3.4.2 字典
空字典初始化用{},這里我們設(shè)置seq序號為1,作為new_img_item的初始化。
字典通過一個鍵對應(yīng)一個值的方式直接添加字典元素,和更改鍵對應(yīng)的值。我們可以通過字典的鍵,直接訪問對應(yīng)鍵里的值。
new_img_item = {'seq':1}?
new_img_item['type'] = '4:3'?
new_img_item['url'] = 'http://xcxxxxxxxx'?
print(new_img_item)
輸出的內(nèi)容如下:
{'seq': 1, 'type': '4:3', 'url': 'http://xcxxxxxxxx'}
3.4.3 元組
Python的元組與列表類似,不同之處在于元組的元素不能修改。元組使用小括號 ( ),列表使用方括號 [ ]。
元組創(chuàng)建很簡單,只需要在括號中添加元素,并使用逗號隔開即可,代碼實例如下:
回應(yīng)的輸入內(nèi)容如下:
3.4.4 集合
集合(set)是一個無序的不重復(fù)元素序列(列表),可以使用大括號 { } 或者 set() 函數(shù)創(chuàng)建集合;列表創(chuàng)建使用的是方括號[ ]。創(chuàng)建一個空集合必須用 set() 而不是 { },因為 { } 是用來創(chuàng)建一個空字典,所以創(chuàng)建集合的時候,建議統(tǒng)一使用set函數(shù),以避免跟“字典”這個概念混淆;字典創(chuàng)建是通過鍵值對的形式,而集合則沒有鍵值對的。
創(chuàng)建的示例代碼如下
set_test = set()?
set_test.add('多級分銷')?
set_test.add('會員二維碼')?
set_test.add('推薦者關(guān)系')?
print(set_test)
輸出的內(nèi)容如下,像字典,但是卻沒有鍵值對;像列表,但是又用{}開始和結(jié)尾。
{'多級分銷', '會員二維碼', '推薦者關(guān)系'}
以上是從一個老程序員的角度對Python編程的理解,希望能夠?qū)Υ蠹宜袔椭?。后續(xù)我們準(zhǔn)備對數(shù)據(jù)庫、文件、網(wǎng)址的讀寫做總結(jié),對Python中常用的方法和函數(shù)做總結(jié),同時對Flask這個基礎(chǔ)框架的使用做說明。通過對剩下的這幾個知識點的補充,Python開發(fā)的拼圖基本完結(jié)。