學Python,這10道題你一定得會

作者:捕蛇者說

bugcode.cn/PythonQuesti

Python是個非常受歡迎的編程語言,隨著近些年機器學習、雲計算等技術的發展,Python的職位需求越來越高。下面我收集了10個Python面試官經常問的問題,供大家參考學習。

類繼承

有如下的一段代碼:

class A(object): def show(self): print base showclass B(A): def show(self): print derived showobj = B()obj.show()

如何調用類A的show方法了。 方法如下:

obj.__class__ = Aobj.show()

_class_方法指向了類對象,只用給他賦值類型A,然後調用方法show,但是用完了記得修改回來。

方法對象

問題:為了讓下面這段代碼運行,需要增加哪些代碼?

class A(object): def __init__(self,a,b): self.__a = a self.__b = b def myprint(self): print a=, self.__a, b=, self.__ba1=A(10,20)a1.myprint()a1(80)

答案:為了能讓對象實例能被直接調用,需要實現call方法

class A(object): def __init__(self, a, b): self.__a = a self.__b = b def myprint(self): print a=, self.__a, b=, self.__b def __call__(self, num): print call:, num + self.__a

new和init

下面這段代碼輸入什麼?

class B(object): def fn(self): print B fn def __init__(self): print "B INIT"class A(object): def fn(self): print A fn def __new__(cls,a): print "NEW", a if a>10: return super(A, cls).__new__(cls) return B() def __init__(self,a): print "INIT", aa1 = A(5)a1.fn()a2=A(20)a2.fn()

答案:

NEW 5B INITB fnNEW 20INIT 20A fn

使用new方法,可以決定返回那個對象,也就是創建對象之前,這個可以用於設計模式的單例、工廠模式。init是創建對象是調用的。

Python list和dict生成

下面這段代碼輸出什麼?

ls = [1,2,3,4]list1 = [i for i in ls if i>2]print list1list2 = [i*2 for i in ls if i>2]print list2dic1 = {x: x**2 for x in (2, 4, 6)}print dic1dic2 = {x: item + str(x**2) for x in (2, 4, 6)}print dic2set1 = {x for x in hello world if x not in low level}print set1

答案:

[3, 4] [6, 8]{2: 4, 4: 16, 6: 36}{2: item4, 4: item16, 6: item36}set([h, r, d])

全局和局部變數

下面這段代碼輸出什麼?

num = 9def f1(): num = 20def f2(): print numf2()f1()f2()

答案:

99

num不是個全局變數,所以每個函數都得到了自己的num拷貝,如果你想修改num,則必須用global關鍵字聲明。比如下面這樣

num = 9def f1(): global num num = 20def f2(): print numf2()f1()f2()# prints:# 9# 20

交換兩個變數的值

一行代碼交換兩個變數值

a=8b=9

答案:

(a,b) = (b,a)

默認方法

如下的代碼

class A(object): def __init__(self,a,b): self.a1 = a self.b1 = b print init def mydefault(self): print defaulta1 = A(10,20)a1.fn1()a1.fn2()a1.fn3()

方法 fn1/fn2/fn3 都沒有定義,添加代碼,是沒有定義的方法都調用mydefault函數,上面的代碼應該輸出

defaultdefaultdefault

答案:

class A(object): def __init__(self,a,b): self.a1 = a self.b1 = b print init def mydefault(self): print default def __getattr__(self,name): return self.mydefaulta1 = A(10,20)a1.fn1()a1.fn2()a1.fn3()

方法getattr只有當沒有定義的方法調用時,才是調用他。當fn1方法傳入參數時,我們可以給mydefault方法增加一個*args不定參數來兼容。

class A(object): def __init__(self,a,b): self.a1 = a self.b1 = b print init def mydefault(self,*args): print default: + str(args[0]) def __getattr__(self,name): print "other fn:",name return self.mydefaulta1 = A(10,20)a1.fn1(33)a1.fn2(hello)a1.fn3(10)

包管理

一個包里有三個模塊,mod1.py, mod2.py, mod3.py,但使用from demopack import *導入模塊時,如何保證只有mod1、mod3被導入了。

答案:增加init.py文件,並在文件中增加:

__all__ = [mod1,mod3]

閉包

寫一個函數,接收整數參數n,返回一個函數,函數的功能是把函數的參數和n相乘並把結果返回。

答案:

def mulby(num): def gn(val): return num * val return gnzw = mulby(7)print(zw(9));

性能

解析下面的代碼慢在哪

def strtest1(num): str=first for i in range(num): str+="X" return str

答案:python的str是個不可變對象,每次迭代,都會生成新的str對象來存儲新的字元串,num越大,創建的str對象越多,內存消耗越大。

版權聲明:轉載文章和圖片均來自公開網路,版權歸作者本人所有,推送文章除非無法確認,我們都會註明作者和來源。如果出處有誤或侵犯到原作者權益,請與我們聯繫刪除或授權事宜。


春節十二天薪旺專場

課程、乾貨免費送,每天不重樣

春節期間,購18VIP立享1個月全平台視頻免費學

2.14 薪旺傳送門>>七月在線元旦七天:2018VIP年會員限時特價搶購,且所有課程特價秒殺,更有免費拿券、免費領課

推薦閱讀:

請教下如何用python 爬取豆瓣電影的預告片地址?
【Python3網路爬蟲開發實戰】 1.3.2-Beautiful Soup的安裝
pathlib介紹-比os.path更好的路徑處理方式

TAG:Python | 機器學習 |