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