若想技術(shù)精進(jìn),當(dāng)然得把基礎(chǔ)知識(shí)打得牢牢的。
廖雪峰的官方網(wǎng)站 ?python3教程,該網(wǎng)站提供的教程淺顯易懂,還附帶了講學(xué)視頻,非常適合初學(xué)者正規(guī)入門。
以下是通過廖雪峰python官方網(wǎng)站學(xué)習(xí)的個(gè)人查漏補(bǔ)缺。
一、精進(jìn)一下對(duì)python編程語言的認(rèn)知
Life is short, You need Python ?--python programming

在windows中 cmd進(jìn)入命令行窗口 ?鍵入python ?然后再輸入import antigravity ?就能夠跳出該畫面。能帶你飛的python。
使用python是加強(qiáng)版的《烏鴉喝水》:

python的優(yōu)點(diǎn):簡(jiǎn)單、易學(xué)、面向?qū)ο蟆⒖蓴U(kuò)展、跨平臺(tái)、第三方庫支持很多
python的缺點(diǎn):

python解釋器類別:CPython、IPython、PyPy、Jython、IronPython
CPython:這個(gè)解釋器是用C語言開發(fā)的,所以叫CPython。CPython是使用最廣的Python解釋器。
IPython:IPython是基于CPython之上的一個(gè)交互式解釋器,也就是說,IPython只是在交互方式上有所增強(qiáng),但是執(zhí)行Python代碼的功能和CPython是完全一樣的。好比很多國(guó)產(chǎn)瀏覽器雖然外觀不同,但內(nèi)核其實(shí)都是調(diào)用了IE。
***區(qū)別提示***CPython用>>>作為提示符,而IPython用In [序號(hào)]:作為提示符。所以在命令行中>>>提示符是用的CPython解釋器,在PyCharm或者Jupiter Notebook中 [序號(hào)] 提示符是用的IPython解釋器。
Jypthon:Jython是運(yùn)行在Java平臺(tái)上的Python解釋器,可以直接把Python代碼編譯成Java字節(jié)碼執(zhí)行。
IronPython:IronPython和Jython類似,只不過IronPython是運(yùn)行在微軟.Net平臺(tái)上的Python解釋器,可以直接把Python代碼編譯成.Net的字節(jié)碼。
****小結(jié)****Python的解釋器很多,但使用最廣泛的還是CPython。如果要和Java或.Net平臺(tái)交互,最好的辦法不是用Jython或IronPython,而是通過網(wǎng)絡(luò)調(diào)用來交互,確保各程序之間的獨(dú)立性。
python交互模式和命令行模式的區(qū)別:
python交互式模式的代碼是輸入一行,執(zhí)行一行;python命令行模型是直接運(yùn)行.py文件,一次性執(zhí)行該文件的所有代碼。 ? ? ??
二、精進(jìn)一下python編程中的基礎(chǔ)知識(shí)點(diǎn)
1. ?關(guān)于python的輸入、輸出(input/print)
print()函數(shù)可以解釋多個(gè)字符串,用逗號(hào)“,”隔開。print()會(huì)依次打印每個(gè)字符串,遇到逗號(hào)“,”會(huì)輸出一個(gè)空格,因此,輸出的字符串會(huì)有空格拼接起來。



關(guān)于python編程好習(xí)慣的養(yǎng)成:python程序大小寫敏感,如果寫錯(cuò),程序會(huì)報(bào)錯(cuò)。 ? 少用“復(fù)制--粘貼”功能,縮進(jìn)會(huì)失效。 ?堅(jiān)持使用4個(gè)空格的縮進(jìn),在文本編輯器中,需要設(shè)置把Tab自動(dòng)轉(zhuǎn)換為4個(gè)空格,確保不混用Tab和空格。
2. ?數(shù)據(jù)類型
整型:和數(shù)學(xué)上的寫法一樣
浮點(diǎn)型:即小數(shù),對(duì)于很大或很小的浮點(diǎn)數(shù),就必須用科學(xué)計(jì)數(shù)法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以寫成1.2e-5,等等。 ? ? (注意::整數(shù)和浮點(diǎn)數(shù)在計(jì)算機(jī)內(nèi)部存儲(chǔ)的方式是不同的,整數(shù)運(yùn)算永遠(yuǎn)是精確的(除法難道也是精確的?是的?。?,而浮點(diǎn)數(shù)運(yùn)算則可能會(huì)有四舍五入的誤差。)
字符串:字符串是以單引號(hào)'或雙引號(hào)"括起來的任意文本。如果字符串內(nèi)部既包含'又包含"怎么辦?可以用轉(zhuǎn)義字符\來標(biāo)識(shí)。
轉(zhuǎn)義字符\可以轉(zhuǎn)義很多字符,比如\n表示換行,\t表示制表符,字符\本身也要轉(zhuǎn)義,所以\\表示的字符就是\。

注意:如果字符串里面有很多字符都需要轉(zhuǎn)義,就需要加很多\,為了簡(jiǎn)化,Python還允許用r''表示''內(nèi)部的字符串默認(rèn)不轉(zhuǎn)義。

Python允許用'''...'''的格式表示多行內(nèi)容。
...是提示符,不是代碼的一部分

布爾類型: ?True、False 。 布爾值用and、or、not運(yùn)算。
空類型:None
list列表類型:list是一種有序的集合,可以隨時(shí)添加和刪除其中的元素。 1)list是一個(gè)可變的有序表,所以,可以往list中追加元素到末尾:append()方法 。 ? ? ? ?2)把元素插入到指定的位置,比如索引號(hào)為1的位置:insert(位置,內(nèi)容)方法。 ? ? ? ?3)刪除list末尾的元素:pop()方法 ;要?jiǎng)h除指定位置的元素,用pop(i)方法,其中i是索引位置。 ? ? ? ??4)要把某個(gè)元素替換成別的元素,可以直接賦值給對(duì)應(yīng)的索引位置。 ? ? ? ? ? ? ? ? 注:python中的列表是“打了激素的列表”,意思是里面什么數(shù)據(jù)類型都能裝。
tuple元組類型:tuple和list非常類似,但是tuple一旦初始化就不能修改。list用name_list=[’Michael‘,’Bob‘,’Tracy‘] ?; ? tuple用name_tuple=(’Michael‘,‘Bob’,‘Tracy’) ,tuple元組類型沒有append(),insert()這樣的方法,也不能給元素賦值更換。不可變的tuple有什么意義?因?yàn)閠uple不可變,所以代碼更安全。注:t=(1)定義的不是tuple,是1這個(gè)數(shù)!這是因?yàn)槔ㄌ?hào)()既可以表示tuple,又可以表示數(shù)學(xué)公式中的小括號(hào),這就產(chǎn)生了歧義,因此,Python規(guī)定,這種情況下,按小括號(hào)進(jìn)行計(jì)算,計(jì)算結(jié)果自然是1。所以,只有1個(gè)元素的tuple定義時(shí)必須加一個(gè)逗號(hào),,來消除歧義:t=(1, )。
***********list和tuple是Python內(nèi)置的有序集合,一個(gè)可變,一個(gè)不可變。根據(jù)需要來選擇使用它們。************
dict字典類型:Python內(nèi)置了字典,dict全稱dictionary,在其他語言中也稱為map,使用鍵-值(key-value)存儲(chǔ),具有極快的查找速度,但是需要占用大量的內(nèi)存,內(nèi)存浪費(fèi)多。使用key-value存儲(chǔ)結(jié)構(gòu)的dict在Python中非常有用,選擇不可變對(duì)象作為key很重要,最常用的key是字符串。 ? ? ? ? ####避免key不存在導(dǎo)致錯(cuò)誤的兩種辦法:一是通過in判斷key是否存在;二是通過dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value。要?jiǎng)h除一個(gè)key,用pop(key)方法,對(duì)應(yīng)的value也會(huì)從dict中刪除。

set集合類型:set和dict類似,也是一組key的集合,但不存儲(chǔ)value。由于key不能重復(fù),所以,在set中,沒有重復(fù)的key,重復(fù)元素在set中自動(dòng)被過濾。1)通過add(key)方法可以添加元素到set中,可以重復(fù)添加,但不會(huì)有效果。 ? ?2)通過remove(key)方法可以刪除元素。 ? ? ? 3)set可以看成數(shù)學(xué)意義上的無序和無重復(fù)元素的集合,因此,兩個(gè)set可以做數(shù)學(xué)意義上的交集 ?&、并集 ?|等操作。
***************可變對(duì)象和不可變對(duì)象**************

小結(jié):print()輸出 ? ?input()輸入 ? ?數(shù)據(jù)類型:整形、浮點(diǎn)型、字符型、布爾型、空類型、list列表類型、tuple元組類型、dict字典類型、set集合類型。
三、精進(jìn)一下python編程中的函數(shù)知識(shí)點(diǎn)
1. ?內(nèi)置函數(shù)
Python內(nèi)置了很多有用的函數(shù),我們可以直接調(diào)用。
>>> dir(__builtins__)//查看內(nèi)置函數(shù)(BIF)列表
>>> help(input)//查看內(nèi)置函數(shù)(BIF)功能描述

Python內(nèi)置函數(shù)詳解——總結(jié)篇
2. ?自定義函數(shù)
有簡(jiǎn)單實(shí)用的內(nèi)置函數(shù),當(dāng)然也可以靈活定義自己想要的函數(shù),注:函數(shù)定義中為了安全起見,有一個(gè)參數(shù)檢查步驟,自定義函數(shù)中可寫,可不寫。但是一個(gè)規(guī)范的、合格的編程者是應(yīng)該寫的。

函數(shù)可以同時(shí)返回多個(gè)值,表面上是多個(gè)值,但實(shí)際返回值是一個(gè)tuple!但是,在語法上,返回一個(gè)tuple可以省略括號(hào),而多個(gè)變量可以同時(shí)接收一個(gè)tuple,按位置賦給對(duì)應(yīng)的值,所以,Python的函數(shù)返回多值其實(shí)就是返回一個(gè)tuple,但寫起來更方便。

3. ?函數(shù)的參數(shù)
1)位置參數(shù):power(x, n)函數(shù)有兩個(gè)參數(shù):x和n,這兩個(gè)參數(shù)都是位置參數(shù),調(diào)用函數(shù)時(shí),傳入的兩個(gè)值按照位置順序依次賦給參數(shù)x和n。 ? ? ?
2)默認(rèn)參數(shù):把第二個(gè)參數(shù)n的默認(rèn)值設(shè)定為2,power(x, n=2)。設(shè)置默認(rèn)參數(shù)時(shí),有幾點(diǎn)要*******注意:一是必選參數(shù)在前,默認(rèn)參數(shù)在后,否則Python的解釋器會(huì)報(bào)錯(cuò)。二是如何設(shè)置默認(rèn)參數(shù)。
當(dāng)函數(shù)有多個(gè)參數(shù)時(shí),把變化大的參數(shù)放前面,變化小的參數(shù)放后面。變化小的參數(shù)就可以作為默認(rèn)參數(shù)。使用默認(rèn)參數(shù)有什么好處?最大的好處是能降低調(diào)用函數(shù)的難度。默認(rèn)參數(shù)有個(gè)最大的坑:定義默認(rèn)參數(shù)要牢記一點(diǎn):默認(rèn)參數(shù)必須指向不變對(duì)象!
3)可變參數(shù):可變參數(shù)允許你傳入0個(gè)或任意個(gè)參數(shù),這些可變參數(shù)在函數(shù)調(diào)用時(shí)自動(dòng)組裝為一個(gè)tuple。定義可變參數(shù)和定義一個(gè)list或tuple參數(shù)相比,僅僅在參數(shù)前面加了一個(gè)*號(hào)。在函數(shù)內(nèi)部,參數(shù)numbers接收到的是一個(gè)tuple,因此,函數(shù)代碼完全不變。但是,調(diào)用該函數(shù)時(shí),可以傳入任意個(gè)參數(shù),包括0個(gè)參數(shù)。

4)關(guān)鍵字參數(shù):可變參數(shù)允許你傳入0個(gè)或任意個(gè)參數(shù),這些可變參數(shù)在函數(shù)調(diào)用時(shí)自動(dòng)組裝為一個(gè)tuple。而關(guān)鍵字參數(shù)允許你傳入0個(gè)或任意個(gè)含參數(shù)名的參數(shù),這些關(guān)鍵字參數(shù)在函數(shù)內(nèi)部自動(dòng)組裝為一個(gè)dict。

5)命名關(guān)鍵字參數(shù):和關(guān)鍵字參數(shù)**kw不同,命名關(guān)鍵字參數(shù)需要一個(gè)特殊分隔符*,*后面的參數(shù)被視為命名關(guān)鍵字參數(shù)。

6)參數(shù)組合:在Python中定義函數(shù),可以用必選參數(shù)、默認(rèn)參數(shù)、可變參數(shù)、關(guān)鍵字參數(shù)和命名關(guān)鍵字參數(shù),這5種參數(shù)都可以組合使用。但是請(qǐng)注意,參數(shù)定義的順序必須是:必選參數(shù)、默認(rèn)參數(shù)、可變參數(shù)、命名關(guān)鍵字參數(shù)和關(guān)鍵字參數(shù)。
對(duì)于任意函數(shù),都可以通過類似func(*args, **kw)的形式調(diào)用它,無論它的參數(shù)是如何定義的。 ?*args可變參數(shù),相當(dāng)于傳入一個(gè)tuple? ?**kw關(guān)鍵字參數(shù) ,相當(dāng)于傳入一個(gè)dict ? ? * ?命名關(guān)鍵字參數(shù)

關(guān)于函數(shù)參數(shù)的有用小結(jié):

4. ?遞歸函數(shù)
1)使用遞歸函數(shù)的優(yōu)點(diǎn)是邏輯簡(jiǎn)單清晰,缺點(diǎn)是過深的調(diào)用會(huì)導(dǎo)致棧溢出。2)針對(duì)尾遞歸優(yōu)化的語言可以通過尾遞歸防止棧溢出。尾遞歸事實(shí)上和循環(huán)是等價(jià)的,沒有循環(huán)語句的編程語言只能通過尾遞歸實(shí)現(xiàn)循環(huán)。3)Python標(biāo)準(zhǔn)的解釋器沒有針對(duì)尾遞歸做優(yōu)化,任何遞歸函數(shù)都存在棧溢出的問題。
學(xué)習(xí)進(jìn)度條:

參考文章:
【2】Life is short, You need Python