學習Python語言總結(jié)之談
學習Python語言時要確定Python是動態(tài)語言,所謂動態(tài)語言,現(xiàn)在大致認同的一個定義是:程序運行期間允許改變程序結(jié)構(gòu)或者變量類型,Python直接編寫的程序段有時運行效率甚至高于用C編寫的程序。
Guido在Python 語言的設計過程中吸收了ABC語言的許多優(yōu)點,諸如ABC的數(shù)據(jù)類型(列表、元組、文本等),變量無需聲明,內(nèi)建的功能強大的字符串處理以及簡單的控制結(jié)構(gòu)等特性;
同時摒棄了ABC語言的一些缺陷,其中最主要的就是使學習Python語言更易擴展,這也是Python語言現(xiàn)在如此流行的原因之一。Python的第一個實現(xiàn)是在mac機上,Python語言的設計還受到Modula-3(另一種優(yōu)美強大的語言)的影響,并結(jié)合了Unix Shell和C的習慣。
現(xiàn)在Python是OpenSource的項目,同時Python社區(qū)非常的活躍,極大促進了Python語言的發(fā)展。目前 Python語言最新的版本是2.4.2。 Python是面向?qū)ο蟮模缙脚_的,可擴展的解釋型通用編程語言,它支持模塊和包;Python的代碼類型有三種:.py .pyc .pyo。
分別是字節(jié)代碼,二進制代碼,優(yōu)化代碼,都可以直接運行,無需編譯或者鏈接的步驟,而且Python還提供交互執(zhí)行環(huán)境;Python是動態(tài)類型語言,不需要類型聲明;提供自動內(nèi)存管理;內(nèi)置高級數(shù)據(jù)類型和操作支持;Python可擴展,可嵌入;
語法簡單清晰,強調(diào)代碼可讀性;可動態(tài)加載C模塊;可動態(tài)裝載Python模塊;Python屬動態(tài)語言,允許在程序運行期間動態(tài)添加刪除函數(shù),對類和實例可以在運行時動態(tài)添加修改方法;Python 是具有內(nèi)省性的語言;提供標準的GUI框架開發(fā)圖形界面程序;支持標準Internet協(xié)議;支持內(nèi)建的和第三方提供的庫,豐富的庫支持;免費使用且完全開放源代碼。
除了這些內(nèi)置高級數(shù)據(jù)類型,程序員還可以通過擴展模塊自定義內(nèi)置數(shù)據(jù)類型以支持實際應用;Python屬動態(tài)類型語言。這是大部分腳本語言的特性:通過賦值決定或改變變量類型;Python使用縮排標識程序塊結(jié)構(gòu),這是Python的一大特色,減少了不必要的塊包圍符號;
str、unicode、list、 tuple等類可以通過乘法實現(xiàn)多個容器的組合,可以通過分片進行分割,還能夠負索引表示從后向前查找;學習Python語言不提供顯式的內(nèi)存分配回收API,完全自動的內(nèi)存管理;Python memory manager實現(xiàn)了對程序運行時堆的管理,包括內(nèi)存的分配,垃圾回收機制等;
垃圾回收(garbage collection,一下簡稱GC)在當前的版本中使用的是引用計數(shù)垃圾收集和可選的循環(huán)結(jié)構(gòu)垃圾空間掃描技術(shù)。一旦對象變得‘不可達’的時候就會被回收,但是不保證能夠回收包含循環(huán)引用計數(shù)的內(nèi)存垃圾。引用計數(shù)的算法比較直觀:在每個存儲片中記錄了指向其的指針數(shù)目;
在對存儲片進行某些操作時,對引用計數(shù)進行更新,分配一個存儲片時引用計數(shù)初始化為1,只要存儲片的引用被復制,引用計數(shù)加1,存儲片的引用被刪除時,引用計數(shù)減1,如果引用計數(shù)減為0,則存儲片會由于不可達而被回收。
很明顯引用計數(shù)算法不能回收循環(huán)的數(shù)據(jù)結(jié)構(gòu);設想一個簡單的場景:對象a一個成員指向?qū)ο骲,同時b也有一個成員指向a,而且代碼中只有引用a的部分,b對象只是輔助a對象而生成的。
如果后來a對象被刪除了,那么a和b作為一個整體都變成內(nèi)存垃圾了,理論上應該都被內(nèi)存管理器刪除,但是由于引用計數(shù)算法每次只考察一個結(jié)點,因此對于循環(huán)的數(shù)據(jù)結(jié)構(gòu)無法回收。所以在編程時應盡量避免循環(huán)引用的情況出現(xiàn)。
【編輯推薦】