Python 10個(gè)面試題

10個(gè)Python面試常問(wèn)的問(wèn)題

類(lèi)繼承

1有如下的一段代碼:

classA(object):

defshow(self):

print'base show'

classB(A):

defshow(self):

print'derived show'

obj = B()

obj.show()

如何調(diào)用類(lèi)A的show方法了。

方法如下:

obj.__class__ = Aobj.show()

__class__方法指向了類(lèi)對(duì)象,只用給他賦值類(lèi)型A,然后調(diào)用方法show,但是用完了記得修改回來(lái)。

方法對(duì)象

問(wèn)題:為了讓下面這段代碼運(yùn)行,需要增加哪些代碼?

classA(object):

def__init__(self,a,b):

self.__a = a

self.__b = b

defmyprint(self):

print'a=', self.__a,'b=', self.__b

a1=A(10,20)

a1.myprint()

a1(80)


答案:為了能讓對(duì)象實(shí)例能被直接調(diào)用,需要實(shí)現(xiàn)__call__方法

classA(object):

def__init__(self, a, b):

self.__a = a

self.__b = b

defmyprint(self):

print'a=', self.__a,'b=', self.__b

def__call__(self, num):

print'call:', num + self.__a

new和init

下面這段代碼輸入什么?

classB(object):

deffn(self):

print'B fn'

def__init__(self):

print"B INIT"

classA(object):

deffn(self):

print'A fn'

def__new__(cls,a):

print"NEW", a

ifa>10:

returnsuper(A, cls).__new__(cls)

returnB()

def__init__(self,a):

print"INIT", a

a1 = A(5)

a1.fn()

a2=A(20)

a2.fn()


答案:

NEW5

B INIT

B fn

NEW20

INIT20

A fn

使用__new__方法,可以決定返回那個(gè)對(duì)象,也就是創(chuàng)建對(duì)象之前,這個(gè)可以用于設(shè)計(jì)模式的單例、工廠模式。__init__是創(chuàng)建對(duì)象是調(diào)用的。

Python list和dict生成

下面這段代碼輸出什么?

ls = [1,2,3,4]

list1 = [iforiinlsifi>2]

printlist1

list2 = [i*2foriinlsifi>2]

printlist2

dic1 = {x: x**2forxin(2,4,6)}

printdic1

dic2 = {x:'item'+ str(x**2)forxin(2,4,6)}

printdic2

set1 = {xforxin'hello world'ifxnotin'low level'}

printset1


答案:

[3,4]

[6,8]

{2:4,4:16,6:36}

{2:'item4',4:'item16',6:'item36'}

set(['h','r','d'])

全局和局部變量

下面這段代碼輸出什么?

num =9

deff1():

num =20

deff2():

printnum

f2()

f1()

f2()


答案:

9

9

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

num =9

deff1():

globalnum

num =20

deff2():

printnum

f2()

f1()

f2()

# prints:

# ? ? ?9

# ? ? ?20

交換兩個(gè)變量的值

一行代碼交換兩個(gè)變量值

a=8

b=9


答案:

(a,b) = (b,a)

默認(rèn)方法

如下的代碼

classA(object):

def__init__(self,a,b):

self.a1 = a

self.b1 = b

print'init'

defmydefault(self):

print'default'

a1 = A(10,20)

a1.fn1()

a1.fn2()

a1.fn3()

方法 fn1/fn2/fn3 都沒(méi)有定義,添加代碼,是沒(méi)有定義的方法都調(diào)用mydefault函數(shù),上面的代碼應(yīng)該輸出

defaultdefaultdefault


答案:

classA(object):

def__init__(self,a,b):

self.a1 = a

self.b1 = b

print'init'

defmydefault(self):

print'default'

def__getattr__(self,name):

returnself.mydefault

a1 = A(10,20)

a1.fn1()

a1.fn2()

a1.fn3()

方法__getattr__只有當(dāng)沒(méi)有定義的方法調(diào)用時(shí),才是調(diào)用他。當(dāng)fn1方法傳入?yún)?shù)時(shí),我們可以給mydefault方法增加一個(gè)*args不定參數(shù)來(lái)兼容。

classA(object):

def__init__(self,a,b):

self.a1 = a

self.b1 = b

print'init'

defmydefault(self,*args):

print'default:'+ str(args[0])

def__getattr__(self,name):

print"other fn:",name

returnself.mydefault

a1 = A(10,20)

a1.fn1(33)

a1.fn2('hello')

a1.fn3(10)

包管理

一個(gè)包里有三個(gè)模塊,mod1.py, mod2.py, mod3.py,但使用from demopack import *導(dǎo)入模塊時(shí),如何保證只有mod1、mod3被導(dǎo)入了。

答案:增加__init__.py文件,并在文件中增加:

__all__ = ['mod1','mod3']

閉包

寫(xiě)一個(gè)函數(shù),接收整數(shù)參數(shù)n,返回一個(gè)函數(shù),函數(shù)的功能是把函數(shù)的參數(shù)和n相乘并把結(jié)果返回。


答案:

defmulby(num):

defgn(val):

returnnum * val

returngn

zw = mulby(7)

print(zw(9));

性能

解析下面的代碼慢在哪

defstrtest1(num):

str='first'

foriinrange(num):

str+="X"

returnstr

答案:python的str是個(gè)不可變對(duì)象,每次迭代,都會(huì)生成新的str對(duì)象來(lái)存儲(chǔ)新的字符串,num越大,創(chuàng)建的str對(duì)象越多,內(nèi)存消耗越大。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 兩本不錯(cuò)的書(shū): 《Python參考手冊(cè)》:對(duì)Python各個(gè)標(biāo)準(zhǔn)模塊,特性介紹的比較詳細(xì)。 《Python核心編程...
    靜熙老師哈哈哈閱讀 3,445評(píng)論 0 80
  • 今天周六沒(méi)有做任何早晨的思考活動(dòng),一天就是家庭事務(wù)和裝修活動(dòng),到晚上想寫(xiě)點(diǎn)什么的時(shí)間,發(fā)現(xiàn)大腦空空如也,不知道該寫(xiě)...
    digman閱讀 133評(píng)論 0 0
  • 你曾是少年,幻想一腔熱血走世界,立志干一番驚天偉業(yè)。 上大學(xué)的時(shí)候,你從來(lái)不相信自己會(huì)找不到工作,或者說(shuō)滿意的工作...
    一首詩(shī)一段情閱讀 525評(píng)論 3 7
  • 我以前不會(huì)說(shuō)對(duì)不起三個(gè)字,尤其是和我的家人,謝謝你三個(gè)字也不會(huì)說(shuō),感覺(jué)難以啟齒的程度和前者相差無(wú)幾,高興就和家人有...
    亭子文閱讀 247評(píng)論 2 0
  • 怎樣可以算手機(jī)攝影好片?6月15日晚的手機(jī)攝影公開(kāi)課有講,長(zhǎng)話短說(shuō),內(nèi)容是?先看一張圖: 1.震撼力; 是非常主觀...
    你男朋友掉地上了閱讀 1,310評(píng)論 1 9

友情鏈接更多精彩內(nèi)容