書接上回,咱們繼續來講說python的面試題,我在各個網站蒐集了一些,我給予大家一個推薦的答案,大家能夠組織成本身的語言來講出來,讓咱們更好的作到面向工資編程python
1、Q:說說你對zen of python的理解,你有什麼辦法看到它。面試
A:The Zen of Python是Python語言的指導原則,遵循這些基本原則,輸入import this,而後直接運行便可 編程
2、Q:什麼是元類(meta_class)緩存
A:咱們定義類來建立對象,可是如今咱們知道類也是對象。那麼是經過什麼來建立類呢?答案就是元類。咱們能夠將元類稱之爲類工廠。若是咱們定義了metaclass屬性,Python就會使用這個元類來建立類Foo。注意,編譯器首先讀取class Foo(object)
,這時並不會在內存中建立Foo類。Python會繼續查找類定義中的__meatclass__
,若是找到了,就使用它來建立類Foo,若是沒有找到,就使用type來建立類。Python工做流程以下:首先檢查Foo
中是否具備屬性__metaclass__
?若是找到,就使用__metaclass__
定義的元類在內存中建立一個類對象。若是在類定義中沒有找到這個屬性,就在模塊級別中進行查找。若是仍是沒有找到,就會使用父類Bar中的元類來建立類。注意:類中的__metaclass__
屬性不會被子類繼承,可是父類中的__class__
會被繼承。這裏寫的比較片面,你們能夠參考 https://www.jianshu.com/p/cec91b9ef2a4dom
3、Q:對比一下dict中 items 與 iteritems函數
A:items是能夠將字典中的全部項,以列表方式返回。由於字典是無序的,因此用items方法返回字典的全部項,也是沒有順序的。網站
iteritems方法做用:與items方法相比做用大體相同,只是它的返回值不是列表,而是一個迭代器。this
4、Q:有用過with statement嗎?它的好處是什麼?
A:with語句的做用是經過某種方式簡化異常處理,它是所謂的上下文管理器的一種編碼
with open('output.txt', 'w') as f: f.write('Hi there!')
當你要成對執行兩個相關的操做的時候,這樣就很方便,以上即是經典例子,with語句會在嵌套的代碼執行以後,自動關閉文件。這種作法的還有另外一個優點就是,不管嵌套的代碼是以何種方式結束的,它都關閉文件。若是在嵌套的代碼中發生異常,它可以在外部exception handler catch異常前關閉文件。若是嵌套代碼有return/continue/break語句,它一樣可以關閉文件spa
5、Q:說說decorator的用法和它的應用場景,若是能夠的話,寫一個decorator(裝飾器)
A:裝飾器就是把函數包裝一下,爲函數添加一些附加功能,裝飾器就是一個函數,參數爲被包裝的函數,返回包裝後的函數:
def d(fp): def _d(*arg, **karg): print "do sth before fp.." r= fp(*arg, **karg) print "do sth after fp.." return r return _d @d def f(): print "call f"
應用場景應用場景:引入日誌,函數執行時間統計,執行函數前預備處理,執行函數後清理功能,權限校驗等場景,緩存,事務處理。當函數能夠做爲參數傳遞的語言,可使用裝飾器
6、Q:如何在一個函數內部修改全局變量
A:利用global 修改全局變量
#!/usr/bin/env python # -*- coding: utf-8 -*- a = 1 def change(): global a a = 3 print(a) change() print(a)
7、Q:列出5個python標準庫
A:os:提供了很多與操做系統相關聯的函數
sys: 一般用於命令行參數
re: 正則匹配
math: 數學運算
datetime:處理日期時間
8、Q:簡述面向對象中__new__和__init__區別
A:一、__new__至少要有一個參數,表明當前類,此參數在實例化時由Python解釋器自動識別
二、__new__必需要有返回值,返回實例化出來的實例,這點在本身實現__new__時要特別注意,能夠return父類(經過super(當前類名))__new__出來的實例,或者直接是object的__new__出來的實例
三、__init__有一個參數self,就是這個__new__返回的實例,__init__在__new__的基礎上能夠完成一些其它初始化的動做,__init__不須要返回值
四、若是__new__建立的是當前類的實例,會自動調用__init__函數,經過return語句裏面調用的__new__函數的第一個參數是cls來保證是當前類實例,若是是其餘類的類名,;那麼實際建立返回的就是其餘類的實例,其實就不會調用當前類的__init__函數,也不會調用其餘類的__init__函數。
9、Q:python中生成隨機整數、隨機小數、0--1之間小數方法
A:隨機整數:random.randint(a,b),生成區間內的整數
隨機小數:習慣用numpy庫,利用np.random.randn(5)生成5個隨機小數
0-1隨機小數:random.random(),括號中不傳參
10、Q:python2和python3區別?列舉5個
A:一、Python3 使用 print 必需要以小括號包裹打印內容,好比 print('hi')
Python2 既可使用帶小括號的方式,也可使用一個空格來分隔打印內容,好比 print 'hi'
二、python2 range(1,10)返回列表,python3中返回迭代器,節約內存
三、python2中使用ascii編碼,python3中使用utf-8編碼
四、python2中unicode表示字符串序列,str表示字節序列
python3中str表示字符串序列,byte表示字節序列
五、python2中爲正常顯示中文,引入coding聲明,python3中不須要
六、python2中是raw_input()函數,python3中是input()函數
七、浮點數除法操做符「/」和「//」的區別
"/":
Python2:若爲兩個整形數進行運算,結果爲整形,但若兩個數中有一個爲浮點數,則結果爲浮點數;
Python3:爲真除法,運算結果再也不根據參加運算的數的類型。
"//":
Python2:返回小於除法運算結果的最大整數;從類型上講,與"/"運算符返回類型邏輯一致。
Python3:和 Python2 運算結果同樣。
題目都是各類散裝百度來的,答案也是如此,可是本身寫了一遍,也讀了一遍,也以爲本身收穫了很多。