Python回顾与整理1:Python基础
0.說明
????????
????????學(xué)習(xí)Python其實(shí)也有好一段時(shí)間了,之前也做了不少筆記,但是要真正把Python學(xué)得很扎實(shí),沒有對(duì)Python系統(tǒng)的了解是遠(yuǎn)遠(yuǎn)不夠的,哪怕是最基礎(chǔ)的知識(shí)點(diǎn),所以決定好好地回顧整理。
????????當(dāng)然,就以《Python核心編程》這本書為綱,希望可以把自己對(duì)Python的理解連成系統(tǒng)的一條線。
1.語句和語法
`#`:注釋
`\`:換行,如果是閉合操作符如`( )`,`[ ]`,`{ }`等,可以不使用`\`
`:`:分號(hào)將代碼頭和代碼體分開
`縮進(jìn)`:用以區(qū)分不同的代碼塊
`;`:同一行寫多個(gè)語句,但不建議
`模塊`:一個(gè).py腳本文件就是一個(gè)模塊
2.變量賦值
(1)賦值操作符:=
在Python中,對(duì)象是通過引用傳遞的,賦值時(shí),是將該對(duì)象的引用(不是一個(gè)值)賦給這個(gè)變量。
另外,Python賦值語句沒有返回值,但可以使用賦值鏈:
(2)增量賦值
只有類似+=這樣的增量賦值,沒有自增自減的方法
特性:可變對(duì)象(列表,字典等)就修改(無需拷貝引用),不可變對(duì)象(數(shù)字,元組等)則分配一個(gè)新對(duì)象
(3)多重賦值
一個(gè)對(duì)象可被多個(gè)變量引用,多個(gè)對(duì)象也可被多個(gè)對(duì)象引用
(4)多元賦值:元組賦值
>>>?(x,?y,?z)?=?(1,?2,?'a?string')不加括號(hào)也可以,但建議加上
可用于兩值的交換
3.標(biāo)識(shí)符
關(guān)鍵字標(biāo)識(shí)符:保留字,不能用于其他用途,否則會(huì)引起SyntaxError異常
內(nèi)建(built-in)標(biāo)識(shí)符:是__builtins__模塊的成員,在程序開始或交互解釋器開始時(shí),由Python解釋器自動(dòng)導(dǎo)入,可以將其作為Python全局變量,可以重新賦值,但不建議
__專用下劃線標(biāo)識(shí)符:
__xxx:類中的私有變量名,不能用`from module import *`導(dǎo)入,變量是私有時(shí),建議使用這種方法
__xxx__:系統(tǒng)定義名字,如內(nèi)建標(biāo)識(shí)符
????另外,Pythonn不支持標(biāo)識(shí)符重載,所以任何時(shí)刻都只有一個(gè)名字綁定。
4.基本風(fēng)格指南
注釋:#號(hào)
文檔:模塊,類聲明或函數(shù)聲明中第一個(gè)沒有賦值的字符串,可通過obj.__doc__訪問
縮進(jìn):以空格代替制表符
標(biāo)識(shí)符名稱:名字簡(jiǎn)短有意義
Python風(fēng)格指南:import this
(1)模塊結(jié)構(gòu)和布局
起始行(Unix)
????????這樣僅輸入腳本名字就可以執(zhí)行腳本,無需直接調(diào)用解釋器。
模塊文檔
????????可通過obj.__doc__訪問
模塊導(dǎo)入
變量定義:盡量使用局部變量代替全局變量
類定義
函數(shù)定義
主程序
? ? ? ? 關(guān)于主程序,注意下面幾點(diǎn):
1.絕大部分模塊創(chuàng)建的目的是被其它模塊導(dǎo)入而不是作為腳本執(zhí)行,總之只有一個(gè)模塊,也就是包含主程序的模塊會(huì)被執(zhí)行;
2.最高級(jí)別的Python語句(沒有縮進(jìn))在模塊被導(dǎo)入時(shí)就會(huì)被執(zhí)行;
3.通常只有主程序模塊中有大量的頂級(jí)可執(zhí)行代碼,所有其他被導(dǎo)入模塊只應(yīng)該有很少的頂級(jí)執(zhí)行代碼,所有的功能代碼都應(yīng)該封裝在函數(shù)或類當(dāng)中。
對(duì)于上面三點(diǎn),只要聯(lián)系自己在實(shí)際項(xiàng)目開發(fā)中的例子就可以很好的理解了。
(2)在主程序中書寫測(cè)試代碼
????如果想測(cè)試被導(dǎo)入的模塊的某個(gè)函數(shù)的功能,就可以使用主程序的方法,引入并執(zhí)行該函數(shù),這就是測(cè)試功能的使用,當(dāng)然在大型程序中,更傾向使用unittest。
5.內(nèi)存管理
變量定義:變量無須事先聲明
在Python中無需顯式變量聲明語句,變量在第一次賦值時(shí)自動(dòng)聲明。
動(dòng)態(tài)類型:變量無須指定類型
Python中對(duì)象的類型和內(nèi)存占用都是運(yùn)行時(shí)確定的。
內(nèi)存分配:不用關(guān)心內(nèi)存管理
Python解釋器承擔(dān)了內(nèi)在管理的復(fù)雜任務(wù)。
引用計(jì)數(shù):對(duì)象回收
(1)增加引用計(jì)數(shù)
當(dāng)對(duì)象被創(chuàng)建并(將其引用)賦值給變量時(shí),該對(duì)象的引用計(jì)數(shù)就被設(shè)置為1
當(dāng)一個(gè)對(duì)象(的引用)又被賦值給其他變量時(shí),或作為參數(shù)傳遞給函數(shù),方法或類實(shí)例時(shí),或者被賦值為一個(gè)窗口對(duì)象(列表,字典等)的成員時(shí),該對(duì)象新的一個(gè)引用會(huì)被創(chuàng)建,引用計(jì)數(shù)加1
(2)減少引用計(jì)數(shù)
一個(gè)本地引用離開其作用范圍
如函數(shù)執(zhí)行完畢后局部變量被銷毀。
對(duì)象別名被顯式銷毀
當(dāng)變量被賦值給另外一個(gè)對(duì)象時(shí),原對(duì)象的引用計(jì)數(shù)也會(huì)自動(dòng)減1
對(duì)象被從一個(gè)窗口對(duì)象中移除
窗口對(duì)象本身被銷毀
????????即執(zhí)行del y會(huì)產(chǎn)生下面兩個(gè)結(jié)果:
1.從現(xiàn)在名稱空間中刪除y
2.y變量對(duì)應(yīng)的對(duì)象的引用計(jì)數(shù)減1
需要注意的是,如果內(nèi)存中仍然有在使用該對(duì)象,這會(huì)增加一個(gè)額外的引用,則它還不會(huì)被回收。
垃圾收集
????????解釋器跟蹤對(duì)象的引用計(jì)數(shù),垃圾收集器負(fù)責(zé)釋放內(nèi)存。其實(shí)際,垃圾收集器是一塊獨(dú)立代碼,用來查找引用計(jì)數(shù)為0的對(duì)象和那些引用計(jì)數(shù)雖然大于0但也應(yīng)該被銷毀的對(duì)象(如循環(huán)引用的對(duì)象)。
????????垃圾收集器 = 引用計(jì)數(shù)器 + 循環(huán)垃圾計(jì)數(shù)器,這在存在循環(huán)引用的情況中非常有用:
循環(huán)引用:發(fā)生在至少兩個(gè)對(duì)象互相引用時(shí),也就是當(dāng)其它所有對(duì)它們的引用都消失時(shí),他們兩者所產(chǎn)生的對(duì)各自的引用仍然存在,例如兩個(gè)類中有各自的一個(gè)實(shí)例
引用計(jì)數(shù)器作用:當(dāng)一個(gè)對(duì)象的引用計(jì)數(shù)變?yōu)?,解釋器會(huì)暫停,釋放掉這個(gè)對(duì)象和僅有這個(gè)對(duì)象可訪問(可到達(dá)的)其它對(duì)象(這樣的話,其它對(duì)象的引用計(jì)數(shù)必然是1)
循環(huán)垃圾計(jì)數(shù)器作用:作為引用計(jì)數(shù)器的補(bǔ)充,垃圾收集器也會(huì)留心被分配的總量很大的(及未通過引用計(jì)數(shù)銷毀的那些)對(duì)象,在這種情況下,解釋器也會(huì)停下來,試圖清理所有未引用的循環(huán)
????????基本可以理解,但具體怎么實(shí)現(xiàn)的,就需要看Python的源碼分析了。
6.第一個(gè)Python程序
????主要提及一點(diǎn):使用局部變量替換模塊變量。
????例如,你要使用os.linesep,如果你多次使用,那么建議將其定義為一個(gè)本模塊的全局變量或局部變量,這將會(huì)加快查詢的速度,因?yàn)閷?duì)于os.linesep,要進(jìn)行下面兩步:
首先要查找os,確認(rèn)其是一個(gè)模塊
在這個(gè)模塊中查找linesep變量
將經(jīng)常用到的模塊屬性替換為一個(gè)本地引用,可以讓程序跑得更快。
轉(zhuǎn)載于:https://blog.51cto.com/xpleaf/1750127
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Python回顾与整理1:Python基础的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Runtime(动态添加属性)
- 下一篇: Win7 NFS 设置详解 | X-Sp