當前位置:首頁 >教程首頁 > IT 學院 > 人工智能+Python開發工程師班 >Python必會的12道麵試題,你都會嗎?

Python必會的12道麵試題,你都會嗎?

發布時間:2019-05-16 09:20:05

今天為大家收集了一些Python的麵試題,最近好多小夥伴給我留言說在學習Python,希望可以多發一些Python的文章。小編非常欣慰有這麼多好學的小夥伴,那大家加油,把Python學好,每天都進步一點點。接下來就把這12道麵試題分享給大家。

0.jpg

1.單引號、雙引號和三引號之間的區別

單引號和雙引號主要是用來表示字符串

比如:

單引號:'python'

雙引號:"python"

區別:

若你的字符串裏麵本身包含單引號,必須用雙引號包裹。

比如:"can't find the log "

三引號

三單引號:'''python ''',也可以表示字符串一般用來輸入多行文本,或者用於大段的注釋。

三雙引號:"""python""",一般用在類裏麵,用來注釋類,這樣省的寫文檔,直接用類的對象__doc__訪問獲得文檔。

2.Python的參數傳遞,是值傳遞還是引用傳遞?

Python的參數傳遞有:

位置參數

默認參數

可變參數

關鍵字參數

函數的傳值到底是值傳遞還是引用傳遞,要看情況

不可變參數用值傳遞:

比如像整數和字符串這樣的不可變對象,是通過拷貝進行傳遞的,因為你無論如何都不可能在原處改變不可變對象。

可變參數是用引用傳遞:

比如像列表,字典這樣的對象是通過引用傳遞,和C語言裏麵的用指針傳遞數組很相似,可變對象能在函數內部改變。

3.什麼是lambda函數?它的好處是什麼?

lambda 表達式,通常是在需要一個函數,但是又不想費神去命名一個函數的場合下使用,也就是指匿名函數。

lambda函數:首要用途是指點短小的回調函數。

lambda [arguments]:expression

>>> a=lambdax,y:x+y

>>> a(3,11)

好處:

lambda能和def做同樣種類的工作,特別是對於那些邏輯簡單的函數,直接用lambda會更簡潔,而且省去取函數名的麻煩。

4.字符串格式化: %和 .format的區別是什麼?

字符串的format函數非常靈活,很強大,可以接受的參數不限個數,並且位置可以不按順序,而且有較為強大的格式限定符(比如:填充、對齊、精度等)。

5.Python是如何進行內存管理的?

Python內部使用引用計數,來保持追蹤內存中的對象,所有對象都有引用計數。

引用計數增加的情況:

一個對象分配一個新名稱

將其放入一個容器中(如列表、元組或字典)

引用計數減少的情況:

使用del語句對對象別名顯示的銷毀

引用超出作用域或被重新賦值

垃圾回收

當一個對象的引用計數歸零時,它將被垃圾收集機製處理掉。

內存池機製

Python提供了對內存的垃圾收集機製,它將不用的內存放到內存池而不是返回給操作係統:

Pymalloc機製:為了加速Python的執行效率,Python引入了一個內存池機製,用於管理對小塊內存的申請和釋放。

對於Python對象,如整數,浮點數和List,都有其獨立的私有內存池,對象間不共享他們的內存池。也就是說如果你分配又釋放了大量的整數,用於緩存這些整數的內存就不能再分配給浮點數。

6.介紹一下except的用法和作用

try…except…except…[else…][finally…]

執行try下的語句,如果引發異常,則執行過程會跳到except語句。對每個except分支順序嚐試執行,如果引發的異常與except中的異常組匹配,執行相應的語句。

如果所有的except都不匹配,則異常會傳遞到下一個調用本代碼的最高層try代碼中。

try下的語句正常執行,則執行else塊代碼。如果發生異常,就不會執行。

如果存在finally語句,最後總是會執行。

7.下麵的代碼會不會報錯?

list = ['a', 'b', 'c', 'd', 'e']

print list[10:]

當試圖訪問一個超過列表索引值的成員將導致 IndexError(比如訪問以上列表的 list[10])。盡管如此,試圖訪問一個列表的以超出列表長度數作為開始索引的切片將不會導致 IndexError,並且將僅僅返回一個空列表。

一個討厭的小問題是它會導致出現Bug ,並且這個問題是難以追蹤的,因為它在運行時不會引發錯誤。

8.以下的代碼的輸出將是什麼? 並進行解釋

class Parent(object):

x = 1

class Child1(Parent):

pass

class Child2(Parent):

pass

print Parent.x, Child1.x, Child2.x

Child1.x = 2

print Parent.x, Child1.x, Child2.x

Parent.x = 3

print Parent.x, Child1.x, Child2.x

>>>

1 1 1

1 2 1

3 2 3

可能使你困惑的應該是最後一行的輸出結果是 3 2 3 而不是 3 2 1。為什麼改變了 Parent.x 的值還會改變 Child2.x 的值,但是同時 Child1.x 值卻沒有改變?

這個答案的關鍵是:在 Python中,類變量在內部是作為字典處理的。如果一個變量的名字沒有在當前類的字典中發現,將搜索祖先類(比如父類)直到被引用的變量名被找到.

首先,在父類中設置 x = 1 會使得類變量 x 在引用該類和其任何子類中的值為 1。這就是因為第一個 print 語句的輸出是 1 1 1

然後,如果任何它的子類重寫了該值(例如,我們執行語句 Child1.x = 2)該值僅僅在子類中被改變。這就是為什麼第二個 print 語句的輸出是 1 2 1

最後,如果該值在父類中被改變(例如,我們執行語句 Parent.x = 3),這個改變會影響到任何未重寫該值的子類當中的值(在這個示例中被影響的子類是 Child2)。這就是為什麼第三個 print 輸出是 3 2 3了。

9.說出下麵list1,list2,list3的輸出值分別是什麼?

def extendList(val, list=[]):

list.append(val)

return list

list1 = extendList(10)

list2 = extendList(123,[])

list3 = extendList('a')

print "list1 = %s" % list1

print "list2 = %s" % list2

print "list3 = %s" % list3

>>>

list1 = [10, 'a']

list2 = [123]

list3 = [10, 'a']

許多人會錯誤的認為 list1 應該等於 [10] 以及 list3 應該等於 ['a']。認為 list 的參數會在 extendList 每次被調用的時候會被設置成它的默認值 []。

盡管如此,實際發生的事情是,新的默認列表僅僅隻在函數被定義時創建一次。隨後當 extendList 沒有被指定的列表參數調用的時候,其使用的是同一個列表。這就是為什麼當函數被定義的時候,表達式是用默認參數被計算,而不是它被調用的時候。

因此,list1 和 list3 是操作的相同的列表。而list2是操作的它創建的獨立的列表(通過傳遞它自己的空列表作為list參數的值)

10.請寫出一段Python代碼,實現刪除list裏麵重複的元素

1. 使用set函數,set(list)

2. 使用字典函數

>>>a=[1,2,4,2,4,5,6,5,7,8,9,0]

>>> b={}

>>>b=b.fromkeys(a)

>>>c=list(b.keys())

>>> c

11.用sort進行排序,然後從最後一個元素開始判斷

a=[1,2,4,2,4,5,7,10,5,5,7,8,9,0,3]

a.sort()

last=a[-1]

for i inrange(len(a)-2,-1,-1):

if last==a:

del a

else:last=a

print(a)

12.寫出你認為最Pythonic的代碼

下麵給大家列出一些例子

交互變量

非Pythonic

temp = a

a = b

b = temp

pythonic:

a,b=b,a

判斷其值真假

name = 'Tim'

langs = ['AS3', 'Lua', 'C']

info = {'name': 'Tim', 'sex': 'Male', 'age':23 }

非Pythonic

if name != '' and len(langs) > 0 and info != {}:

print('All True!')

pythonic:

if name and langs and info:

print('All True!')

列表推導式

[x for x in range(1,100) if x%2==0]

zip創建鍵值對

keys = ['Name', 'Sex', 'Age']

values = ['Jack', 'Male', 23]

dict(zip(keys,values))

pythonic的代碼其實有很多,這裏就給大家舉幾個典型的例子。

來源:技術學派頭條號

华体会hth体育网 賞析
  • 2101期學員李思庭作品

    2101期學員李思庭作品

  • 2104期學員林雪茹作品

    2104期學員林雪茹作品

  • 2107期學員趙淩作品

    2107期學員趙淩作品

  • 2107期學員趙燃作品

    2107期學員趙燃作品

  • 2106期學員徐正浩作品

    2106期學員徐正浩作品

  • 2106期學員弓莉作品

    2106期學員弓莉作品

  • 2105期學員白羽新作品

    2105期學員白羽新作品

  • 2107期學員王佳蕊作品

    2107期學員王佳蕊作品

專業問題谘詢

你擔心的問題,火星幫你解答

微信掃碼入群領福利

掃碼領福利最新AI資訊

點擊谘詢
添加老師微信,馬上領取免費課程資源

1. 打開微信掃一掃,掃描左側二維碼

2. 添加老師微信,馬上領取免費課程資源

×

同學您好!

您已成功報名0元試學活動,老師會在第一時間與您取得聯係,請保持電話暢通!
確定