面試準備3

python中重要的一個機制-----垃圾回收機制(GC)
概念:小整數對象池
整數在程序中使用非常廣泛,Python爲了優化速度,使用了小整數對象池,避免爲整數頻繁申請和銷燬內存空間,python中對於小整數的定義是[-5,127]這些整數對象是提前建立好的,不會被垃圾揮手。在python的程序中,所有位於這個範圍內的整數使用的都是同一個對象
概念:大整數對象池
每一個大整數,君創建一個新的對象。
總體:
小整數[-5,257)共用對象,常駐內存
單個字符共用對象,常駐內存
單個單詞,不可修改,默認開啓intern機制,共用對象,引用計數爲0,
則銷燬

(2)垃圾回收
現在的高級語言如java,c#等,都採用了垃圾收集機制,而不再是c,c++裏用戶自己管理維護內存的方式。自己管理內存極其自由,可以任意申請內存,但如同一把雙刃劍,爲大量內存泄露,懸空指針等bug埋下隱患。 對於一個字符串、列表、類甚至數值都是對象,且定位簡單易用的語言,自然不會讓用戶去處理如何分配回收內存的問題。 python裏也同java一樣採用了垃圾收集機制,不過不一樣的是:python採用的是引用計數機制爲主,標記-清除和分代收集兩種機制爲輔的策略

引用計數機制:python裏每一個東⻄都是對象,它們的核心就是一個結構體: PyObject ,該結構體中保存着一個計數機制ob_refcnt,用於統計引用次數,當引用計數爲0時,該對象生命就結束了

typedef	struct_object	{
				int	ob_refcnt;
				struct_typeobject	*ob_type;
}	PyObject;

引用計數機制的優點:
簡單
實時性:一旦沒有引用,內存直接釋放了,不用像其他機制等到特定時機。實時性還帶來一個好處:處理回收內存的時間分攤到了平時。

缺點:
維護引用計數消耗資源
循環引用—無法處理

(3)GC的功能
-----爲新生成的對象分配內存
-----識別垃圾對象,並且從垃圾對象那裏回收內存。

(4)垃圾回收模塊–gc模塊
Python中的垃圾回收是以引用計數爲主,分代收集爲輔。
導致引用計數+1的情況:

對象被創建,例如a=23	
對象被引用,例如b=a	
對象被作爲參數,傳入到一個函數中,例如func(a)	
對象作爲一個元素,存儲在容器中,例如list1=[a,a]	

導致引用計數-1的情況

對象的別名被顯式銷燬,例如del	a	
對象的別名被賦予新的對象,例如a=24	
一個對象離開它的作用域,例如f函數執行完畢時,func函數中的局部變量(全局變量不會)	
對象所在的容器被銷燬,或從容器中刪除對象	

可以查看一個對象的引用計數:
import sys
a = “xuwentao”
sys.getrefcount(a)----得到的比正常的引用計數大1的,由於函數傳參數
python中有專門的垃圾回收機制—GC模塊,該模塊中存在着大量的操作

(5)python中的內建屬性
可以使用dir(xxx)—查看xxx有哪些屬性,py2中無繼承父類,稱之經典類,py3中已默認繼承object
常用的屬性:
__init__方法,默認自動調用父類的。如定義__init__方法時,需自己手動調用父類的__init__方法
__new__方法:創建實例時候需要
__class__方法:實例所在的類
__str__方法:實例字符串表示,可讀性
__del__方法:析構
__bases__方法:類的所有父類構成元素,類名.bases
等等

(6)python中的內建函數
可以通過:help(function)—查看函數如何使用
—range
—map
—filter函數
—reduce函數
—sorted函數
—集合set
等等

(7)python中的模塊
python有一套很有用的標準庫。標準庫會隨着python解釋器,一起安裝到你的電腦中。他是python的一個組成部分:
builtins 內建函數默認加載
os 操作系統接口
sys Python自身的運行環境
functools 常用的工具
json 編碼和解碼 JSON 對象
logging 記錄日誌,調試
multiprocessing 多進程-------------系統編程中使用
threading 多線程---------------------系統編程中使用
copy 拷⻉
time 時間
datetime 日期和時間
calendar 日曆
hashlib 加密算法—一般用於註冊、登錄中的加密算法中
random 生成隨機數
re 字符串正則匹配
socket 標準的 BSD Sockets API
shutil 文件和目錄管理
glob基於文件通配符搜索
常用的拓展庫:
requests 使用的是 urllib3,繼承了urllib2的所有特性
urllib 基於http的高層庫
scrapy 爬蟲
beautifulsoup4 HTML/XML的解析器
celery 分佈式任務調度模塊
redis 緩存
Pillow(PIL) 圖像處理
xlsxwriter 僅寫excle功能,支持xlsx
xlwt 僅寫excle功能,支持xls ,2013或更早版office
xlrd 僅讀excle功能
elasticsearch 全文搜索引擎
pymysql 數據庫連接庫
mongoengine/pymongo mongodbpython接口
matplotlib 畫圖
numpy/scipy 科學計算
django/tornado/flask web框架
xmltodict xml 轉 dict
SimpleHTTPServer 簡單地HTTP Server,不使用Web框架
gevent 基於協程的Python網絡庫
fabric 系統管理
pandas 數據處理庫
scikit-learn 機器學習庫

(8)python中的編碼風格
促進團隊合作
提高代碼可讀性
有助於代碼審查
養成習慣,有助於程序員自身的成長
總之就是編碼規範的能力是在不斷的學習和提升的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章