Python

Python基礎(chǔ)

數(shù)據(jù)類型

空值

None

除法
普通除法.png

保留整數(shù)的除法.png

編碼

Unicode編碼把所有的語言統(tǒng)一到一套編碼里


編碼方式.png

但是因為Unicode編碼長度較長,所以轉(zhuǎn)化成了”可變長編碼“--UTF-8
所以當(dāng)前計算機的編碼格式是這樣子的


編碼轉(zhuǎn)換.png
python文件頭.png
格式化
輸出.png

list和tuple

list
list樣式.png
tuple

tuple是初始化了就不變的


tuple樣式.png

但是,tuple內(nèi)部的有些特殊元素是可以變的


特殊tuple.png

dict和set

dict
dict樣式.png
set

set中沒有重復(fù)的key


set樣式.png

函數(shù)

函數(shù)的參數(shù)

可變參數(shù)

可變參數(shù),此時函數(shù)內(nèi)部接收到的是一個tuple


image.png

但如果要傳入的參數(shù)是個list或tuple而非單獨的元素,那么就不太好操作
所以,python允許在list或tuple之前加一個*


image.png
關(guān)鍵參數(shù)

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


image.png

高級特性

迭代

python中可迭代對象都可以用for循環(huán)遍歷


image.png

查看是否為可迭代對象的方法如下


image.png

如果要對list實現(xiàn)下標(biāo)循環(huán),可以用enumerate函數(shù)把一個list變成索引-元素對


image.png

列表生成式

image.png

生成器

通過列表生成式,我們可以直接創(chuàng)建一個列表。但是,受到內(nèi)存限制,列表容量肯定是有限的。而且,創(chuàng)建一個包含100萬個元素的列表,不僅占用很大的存儲空間,如果我們僅僅需要訪問前面幾個元素,那后面絕大多數(shù)元素占用的空間都白白浪費了。

所以,如果列表元素可以按照某種算法推算出來,那我們是否可以在循環(huán)的過程中不斷推算出后續(xù)的元素呢?這樣就不必創(chuàng)建完整的list,從而節(jié)省大量的空間。在Python中,這種一邊循環(huán)一邊計算的機制,稱為生成器:generator。
生成器的樣式


image.png

生成器的訪問方法


image.png

對于一些不太好寫出生成式的情況,通過yield可以改成generator


image.png

generator和函數(shù)的執(zhí)行流程不一樣。函數(shù)是順序執(zhí)行的,遇到return語句或最后一行語句就返回。而變成generator的函數(shù),在每次調(diào)用next()的時候執(zhí)行,遇到y(tǒng)ield就返回
,再次執(zhí)行時從上次返回的yield語句處繼續(xù)執(zhí)行

迭代器(Iterator)

生成器都是Iterator,但是list,dict,str等雖然都是Iterable的,但不是Iterator。
這是因為Python的Iterator對象表示的是一個數(shù)據(jù)流,Iterator對象可以被next()函數(shù)調(diào)用并不斷返回下一個數(shù)據(jù),直到?jīng)]有數(shù)據(jù)時拋出StopIteration錯誤??梢园堰@個數(shù)據(jù)流看做是一個有序序列,但我們卻不能提前知道序列的長度,只能不斷通過next()函數(shù)實現(xiàn)按需計算下一個數(shù)據(jù),所以Iterator的計算是惰性的,只有在需要返回下一個數(shù)據(jù)時它才會計算。
Iterator甚至可以表示一個無限大的數(shù)據(jù)流,例如全體自然數(shù)。而使用list是永遠不可能存儲全體自然數(shù)的。

如果要把list,dict,str等Iterable變成Iterator可以使用iter()函數(shù)


image.png

小結(jié)


image.png

函數(shù)式編程

高階函數(shù)

map

map()函數(shù)接收兩個參數(shù),一個是函數(shù),一個是Iterable,map將傳入的函數(shù)依次作用到序列的每個元素,并把結(jié)果作為新的Iterator返回。

map樣式


image.png
reduce

reduce把一個函數(shù)作用在一個序列[x1, x2, x3, ...]上,這個函數(shù)必須接收兩個參數(shù),reduce把結(jié)果繼續(xù)和序列的下一個元素做累積計算


image.png

可以巧妙的運用map和reduce函數(shù)完成str2int函數(shù)


image.png
filter
image.png
sorted
image.png

返回函數(shù)

image.png

閉包,此處因為內(nèi)部函數(shù)調(diào)用了外部函數(shù)的局部變量i,所以在外部函數(shù)給f1,f2,f3賦值后,外部函數(shù)被回收,但是因為內(nèi)部函數(shù) f 調(diào)用了 i 這個變量,所以 i 被隨 f 保留了下來,另外,函數(shù) f 被append入fs中三次,所以賦值給三個變量,這三個變量代表了函數(shù) f 這個邏輯結(jié)構(gòu)。需要注意的是,fs 放入的是 f 而非f(),所以只是邏輯塊,沒有實例輸入,并未執(zhí)行該函數(shù)。因此執(zhí)行f1,f2,f3的時候,執(zhí)行的i*i這個邏輯塊時,變量i的值已經(jīng)是3了,所以結(jié)果都是三。


image.png

image.png

如果要避免這種情況,那么可以在fs中塞入執(zhí)行的f


image.png

匿名函數(shù)

image.png

裝飾器

假設(shè)我們要增強now()函數(shù)的功能,比如,在函數(shù)調(diào)用前后自動打印日志,但又不希望修改now()函數(shù)的定義,這種在代碼運行期間動態(tài)增加功能的方式,稱之為“裝飾器”(Decorator)

寫一個裝飾器log(),


image.png

把裝飾器安裝在要裝飾的函數(shù)之前


image.png

結(jié)果如下


image.png

此時now函數(shù)被裝飾成了wrapper函數(shù),now的函數(shù)名指向的也是wrapper而非now,所以要糾正這個問題,可以使用@functools.wraps(func)


image.png
image.png

偏函數(shù)

functools.partial就是幫助我們創(chuàng)建一個偏函數(shù)的,不需要我們自己定義int2(),可以直接使用下面的代碼通過int函數(shù)創(chuàng)建一個新的函數(shù)int2


image.png

模塊

使用模塊

image.png

面向?qū)ο缶幊?/h1>

類和實例

image.png

訪問限制

如果要讓內(nèi)部屬性不被外部訪問,可以把屬性的名稱前加上兩個下劃線,在Python中,實例的變量名如果以開頭,就變成了一個私有變量(private),只有內(nèi)部可以訪問,外部不能訪問,所以,我們把Student類改一改

image.png

獲取對象信息

如果要獲得一個對象的所有屬性和方法,可以使用dir()函數(shù),它返回一個包含字符串的list,比如,獲得一個str對象的所有屬性和方法


image.png

類似xxx的屬性和方法在Python中都是有特殊用途的,比如len方法返回長度。在Python中,如果你調(diào)用len()函數(shù)試圖獲取一個對象的長度,實際上,在len()函數(shù)內(nèi)部,它自動去調(diào)用該對象的len()方法,所以,下面的代碼是等價的

image.png

對于函數(shù)hasattr
一個正確的用法的例子如下


image.png

實例屬性和類屬性

如果Student類本身需要綁定一個屬性


image.png

面向?qū)ο蟾呒壘幊?/h1>

slots

python作為動態(tài)語言,可以在程序運行過程中動態(tài)給class加上功能
但是,如果想要限制類的屬性,比如,只允許對Student實例添加name和age屬性,使用slots
即可

image.png

image.png

@property

Python內(nèi)置的@property裝飾器負(fù)責(zé)把一個方法變成屬性調(diào)用,這里@property表示getter方法


image.png

image.png

多重繼承

通過多重繼承,一個子類就可以同時獲得多個父類的所有功能


image.png

元類

可以使用type()創(chuàng)建類


image.png

image.png

IO編程

文件讀寫

image.png

也可以簡潔地寫


image.png

操作文件和目錄

如果是posix,說明系統(tǒng)是Linux、Unix或Mac OS X,如果是nt,就是Windows系統(tǒng)


image.png

環(huán)境變量的訪問


image.png

image.png

操作文件和目錄


image.png
image.png

序列化


image.png

image.png

image.png

進程和線程(用到了再看)

多進程

image.png

image.png

訪問數(shù)據(jù)庫

MySql

如何連接到MySql的test數(shù)據(jù)庫


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

相關(guān)閱讀更多精彩內(nèi)容

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