對Python動態類型語言解析
其實Python動態類型語言與C++的性質非常相似,有些變化引起的錯誤卻很嚴重,本文就對于大多數用戶頭疼的Python動態類型語言進行詳細的剖析與介紹,僅供大家學習思考。
Python的創始人是Guido van Rossum,在發明Python語言之前Guido曾參與過一門稱作ABC的語言的設計,ABC是專門為非專業程序員設計的;Guido在Python 語言的設計過程中吸收了ABC語言的許多優點。
諸如ABC的數據類型(列表、元組、文本等),變量無需聲明,內建的功能強大的字符串處理以及簡單的控制結構等特性;同時摒棄了ABC語言的一些缺陷,其中最主要的就是使Python更易擴展。
這也是Python語言現在如此流行的原因之一,Python的第一個實現是在mac機上,Python語言的設計還受到Modula-3(另一種優美強大的語言)的影響,并結合了Unix Shell和C的習慣。#t#
現在Python是OpenSource的項目,同時Python社區非常的活躍,極大促進了Python動態類型語言的發展。目前 Python語言最新的版本是2.4.2。 Python的特性 Python是面向對象的,跨平臺的,可擴展的解釋型通用編程語言,它支持模塊和包;Python的代碼類型有三種:.py .pyc .pyo,分別是字節代碼。
二進制代碼,優化代碼,都可以直接運行,無需編譯或者鏈接的步驟,而且Python還提供交互執行環境;Python動態類型語言,不需要類型聲明;提供自動內存管理;內置高級數據類型和操作支持;Python可擴展,可嵌入;語法簡單清晰,強調代碼可讀性;可動態加載C模塊;可動態裝載Python模塊;
Python屬動態語言,允許在程序運行期間動態添加刪除函數,對類和實例可以在運行時動態添加修改方法;Python 是具有內省性的語言;提供標準的GUI框架開發圖形界面程序;支持標準Internet協議;支持內建的和第三方提供的庫,豐富的庫支持;免費使用且完全開放源代碼。
- >>> type([])
- <type 'list'>
- >>>import sys
- >>> type(sys)
- <type 'module'>
- >>> type(dir)
- <type 'builtin_function_or_method'>
- hasattr()函數和getattr()函數檢索一個對象擁有的屬性
- >>> import os
- >>> hasattr(os.dup, '__doc__')
- True
- >>> print getattr(os.dup, '__doc__')
- dup(fd) -> fd2
- Return a duplicate of a file descriptor.
- callable()函數測試對象的可調用性:
- >>> callable('string')
- False
- >>> callable(callable)
- True
Python動態類型語言不提供顯式的內存分配回收API,完全自動的內存管理;Python memory manager實現了對程序運行時堆的管理,包括內存的分配,垃圾回收機制等;垃圾回收(garbage collection,一下簡稱GC)在當前的版本中使用的是引用計數垃圾收集和可選的循環結構垃圾空間掃描技術。
一旦對象變得‘不可達’的時候就會被回收,但是不保證能夠回收包含循環引用計數的內存垃圾。引用計數的算法比較直觀:在每個存儲片中記錄了指向其的指針數目;在對存儲片進行某些操作時,對引用計數進行更新。
分配一個存儲片時引用計數初始化為1,只要存儲片的引用被復制,引用計數加1,存儲片的引用被刪除時,引用計數減1,如果引用計數減為0,則存儲片會由于不可達而被回收。很明顯引用計數算法不能回收循環的數據結構;設想一個簡單的場景:對象a一個成員指向對象b,同時b也有一個成員指向a,而且代碼中只有引用a的部分。
b對象只是輔助a對象而生成的,如果后來a對象被刪除了,那么a和b作為一個整體都變成內存垃圾了,理論上應該都被內存管理器刪除,但是由于引用計數算法每次只考察一個結點,因此對于循環的數據結構無法回收。所以在編程時應盡量避免循環引用的情況出現。
【編輯推薦】