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