本文主要給大家介紹的是關于最近在面試中遇到的幾個python面試題,分享出來供大家參考學習,下面話不多說,來一起看看詳細的介紹:
一、生成斐波那契數列并取前10項
1
2
3
4
5
6
7
8
|
def func(m): n,a,b = 0 , 1 , 1 while n < m: yield a a,b = b,a + b n + = 1 for one in func( 10 ): print one |
這個可以說是一道常見的簡單算法題了,關鍵點就是理解a,b=b,a+b以及yield的作用。
二、擴展一個列表,列表中的元素可能也包含列表
1
2
3
4
5
6
7
8
9
10
11
|
def myextend(alist): tmp = [] for one in alist: if isinstance (one, list ): tmp.extend(myextend(one)) else : tmp.append(one) return tmp t = [ 1 , 2 , 5 ,[ 3 ,[], 5 , 2 ,[ 57 ]], 90 ] print t print myextend(t) |
考察遞歸調用的思想。
三、有如下代碼,請寫出輸出
1
2
3
4
5
6
7
|
def test(x,l = []): for o in range (x): l.append(o) print l test( 3 ) test( 1 ,[ 3 , 2 , 1 ]) test( 3 ) |
輸入如下:
1
2
3
|
[0,1,2] [3,2,1,0] [0,1,2,0,1,2] |
可變類型作為參數在不顯示傳遞參數時,每次函數調用時候都是共用的;如果傳遞了參數(比如第二種)則不會互相影響。
四、已知某列表中包含重復數據,保持列表中元素第一次出現的順序并去重,要求復雜度為O(n)。
1
2
3
4
5
6
7
8
|
def fun(alist): result = [] temp = set () for o in alist: if o not in temp: result.append(o) temp.add(o) return result |
考察列表、集合等常見操作的復雜度。
五、已知如下函數,請寫出輸出,并寫出正確寫法:
1
2
3
|
z = [ lambda x:x * i for i in range ( 3 )] x = [o( 2 ) for o in z] print x |
輸出為[4,4,4]
這里主要考察python中閉包、返回值為函數時候的知識點。由于lambda函數共用了i變量,當調用時候i已經變成了2,所以輸出都是4。
改正:
1
2
3
4
5
6
7
8
9
|
def func(): def m(x): def n(y): return x * y return n return [f(one) for one in range ( 3 )] z = func() x = [o( 2 ) for o in z] print x |
輸出[0,2,4]
六、創建一個類,并輸出某個屬性。如果這個屬性存在則輸出值,否則輸出這個屬性名的字符串
1
2
3
4
5
6
|
class Mycls( object ): a = 0 def __getattr__( self ,name): print name z = Mycls() print z.a,z.b |
輸出為0,b。
主要考察python的反射機制,以及類相關的__getattr__方法。
注意: __getattr__方法和__getattribute__方法的區別,前者只有在屬性不存在時候調用,返回一個值或者引發異常。而后者是每次都會被調用的。
另外可以看看getattr()
,hasattr()
這種內置函數。
簡答題
- 簡述py2和py3的區別
- python的垃圾回收機制
- python中多線程的方法,局限,以及有什么其他方式進行并發處理
- 簡述epoll、select、poll三種模型
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。
原文鏈接:http://www.hi-roy.com/