Python面試攻略
寫在前面
千呼萬喚始出來,咱們需要的面試文檔終於整理出來啦!這一次,DC君為大家送上的python面試題之基礎概念篇。通過對十幾份面試題目的整理,DC君選出了其中出現頻率最高的十個題目,附上答案供各位小夥伴參考!
1.*args和**kwargs是什麼意思?
答:*args表示可變參數(variadic arguments),它允許你傳入0個或任意個無名參數,這些參數在函數調用時自動組裝為一個tuple; **kwargs表示關鍵字參數(keyword arguments),它允許你傳入0個或任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝為一個dict。同時使用*args和**kwargs的時候,必須保證*args在**kwargs之前。
擴展閱讀:
https://blog.csdn.net/mbugatti/article/details/53884455
2.python裡面如何拷貝一個對象?
答:
(1) 賦值(=),就是創建了對象的一個新的引用,修改其中任意一個變數都會影響到另一個;
(2)淺拷貝(copy.copy()),創建一個新的對象,但它包含的是對原始對象中包含項的引用(如果用引用的方式修改其中一個對象,另一個也會被改變);
(3)深拷貝(copy.deepcopy()),創建一個新的對象,並且遞歸的複製它所包含的對象(修改其中一個,另一個不會改變)
注意:並不是所有的對象都可以拷貝
擴展閱讀:
http://www.cnblogs.com/wilber2013/p/4645353.html
3.簡要描述python的垃圾回收機制
答:python中的垃圾回收是以引用計數為主,標記-清除和分代收集為輔。
引用計數:python在內存中存儲每個對象的引用計數,如果計數變成0,該對象就會消失,分配給該對象的內存就會釋放出來。
標記-清除:一些容器對象,比如說list、dict、tuple、instance等可能會出現引用循環,對於這些循環,垃圾回收器會定時回收這些循環(對象之間通過引用(指針)連在一起,構成一個有向圖,對象構成這個有向圖的節點,而引用關係構成這個有向圖的邊)。
分代收集:python把內存根據對象存活時間劃分為三代,對象創建之後,垃圾回收器會分配它們所屬的代。每個對象都會被分配一個代,而被分配更年輕的代是被優先處理的,因此越晚創建的對象越容易被回收。
擴展閱讀:
https://www.jianshu.com/p/1e375fb40506
4.什麼是lambda函數?它有什麼好處?
答:lambda表達式,通常是在需要一個函數,但是又不想費神去命名一個函數的場合下使用,也就是指匿名函數。
Python允許你定義一種單行的小函數。定義lambda函數的形式如下(lambda參數:表達式)lambda函數默認返回表達式的值。你也可以將其賦值給一個變數。lambda函數可以接受任意個參數,包括可選參數,但是表達式只有一個。
擴展閱讀:
https://www.zhihu.com/question/20125256
5.python如何實現單例模式?
答:單例模式是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例類的特殊類。通過單例模式可以保證系統中一個類只有一個單例而且該單例易於外界訪問,從而方便對實例個數的控制並節約系統資源。如果希望在系統中某個類的對象只能存在一個,單例模式是最好的解決方案。
__new__()在__init__()之前被調用,用於生成實例對象。利用這個方法和累的屬性的特點可以實現設計模式的單例模式。單例模式是指創建唯一對象,單例模式設計的類只能實例。
1.使用__new__方法
2.共享屬性
3.裝飾器版本
4.import方法
※葯的價格是固定的嗎?用Python分析了上千家藥房!遠離被宰!
※Python開發者最流行的框架、庫和工具是什麼?
TAG:Python |