雷鋒網(wǎng)按:本文為 AI 研習(xí)社編譯的技術(shù)博客,原文 Top 35 Python Interview Questions and Answers in 2018 ,作者 DataFlair Team。
翻譯 | 于志鵬 整理 | 凡江
1. Python 面試問(wèn)題及答案
作為一個(gè) Python 新手,你必須熟悉基礎(chǔ)知識(shí)。在本文中我們將討論一些 Python 面試的基礎(chǔ)問(wèn)題和高級(jí)問(wèn)題以及答案,以幫助你完成面試。包括 Python 開發(fā)問(wèn)題、編程問(wèn)題、數(shù)據(jù)結(jié)構(gòu)問(wèn)題、和 Python 腳本問(wèn)題。讓我們來(lái)深入研究這些問(wèn)題。
Python 面試問(wèn)題
Q.1. Python 的特點(diǎn)和優(yōu)點(diǎn)是什么?
Python 可以作為編程的入門語(yǔ)言,因?yàn)樗邆湟韵绿刭|(zhì):
1. 解釋性
2. 動(dòng)態(tài)特性
3. 面向?qū)ο?/p>
4. 語(yǔ)法簡(jiǎn)潔
5. 開源
6. 豐富的社區(qū)資源
實(shí)際上 Python 的優(yōu)點(diǎn)遠(yuǎn)不止這些,更詳細(xì)的介紹可以閱讀 Introduction to Python( https://data-flair.training/blogs/python-tutorial/)
Q.2. 深拷貝和淺拷貝的區(qū)別是什么?
深拷貝是將對(duì)象本身復(fù)制給另一個(gè)對(duì)象。這意味著如果對(duì)對(duì)象的副本進(jìn)行更改時(shí)不會(huì)影響原對(duì)象。在 Python 中,我們使用 deepcopy()函數(shù)進(jìn)行深拷貝,使用方法如下:
深拷貝-Python 面試問(wèn)題及答案
淺拷貝是將對(duì)象的引用復(fù)制給另一個(gè)對(duì)象。因此,如果我們?cè)诟北局羞M(jìn)行更改,則會(huì)影響原對(duì)象。使用 copy()函數(shù)進(jìn)行淺拷貝,使用方法如下:
淺拷貝—Python 面試問(wèn)題及答案
Q.3. 列表和元祖有什么不同?
主要區(qū)別在于列表是可變的,元祖是不可變的??聪旅娴睦樱?/p>
會(huì)出現(xiàn)以下錯(cuò)誤提示:
TypeError: ‘tuple’ object does not support item assignment
關(guān)于列表和元祖的更多內(nèi)容參考 Tuples vs Lists( https://data-flair.training/blogs/python-tuples-vs-lists/)
2. Python 面試基礎(chǔ)題
Q.4 到 Q.20 是新手經(jīng)常會(huì)被問(wèn)到的一些 Python 基礎(chǔ)題,有經(jīng)驗(yàn)的人也可以參考這些問(wèn)題來(lái)復(fù)習(xí)這些概念。
Q.4. 解釋 Python 中的三元表達(dá)式
與 C++不同, 在 Python 中我們不需要使用 ? 符號(hào),而是使用如下語(yǔ)法:
[on true] if []else [on false]
如果 [] 為真, 則 [on true] 部分被執(zhí)行。如果表示為假則 [on false] 部分被執(zhí)行
下面是例子:
2
Hi
Q.5. Python 中如何實(shí)現(xiàn)多線程?
線程是輕量級(jí)的進(jìn)程,多線程允許一次執(zhí)行多個(gè)線程。眾所周知,Python 是一種多線程語(yǔ)言,它有一個(gè)多線程包。
GIL(全局解釋器鎖)確保一次執(zhí)行單個(gè)線程。一個(gè)線程保存 GIL 并在將其傳遞給下一個(gè)線程之前執(zhí)行一些操作,這就產(chǎn)生了并行執(zhí)行的錯(cuò)覺(jué)。但實(shí)際上,只是線程輪流在 CPU 上。當(dāng)然,所有傳遞都會(huì)增加執(zhí)行的開銷。
Q.6. 解釋繼承
一個(gè)類繼承自另一個(gè)類,也可以說(shuō)是一個(gè)孩子類/派生類/子類,繼承自父類/基類/超類,同時(shí)獲取所有的類成員(屬性和方法)。
繼承使我們可以重用代碼,并且還可以更方便地創(chuàng)建和維護(hù)代碼。Python 支持以下類型的繼承:
1. 單繼承- 一個(gè)子類類繼承自單個(gè)基類
2. 多重繼承- 一個(gè)子類繼承自多個(gè)基類
3. 多級(jí)繼承- 一個(gè)子類繼承自一個(gè)基類,而基類繼承自另一個(gè)基類
4. 分層繼承- 多個(gè)子類繼承自同一個(gè)基類
5. 混合繼承- 兩種或兩種以上繼承類型的組合
關(guān)于繼承的更多內(nèi)容參考 Python Inheritance( https://data-flair.training/blogs/python-inheritance/)
Q.7. 什么是 Flask?
Flask 是一個(gè)使用 Python 編寫的輕量級(jí) Web 應(yīng)用框架,使用 BSD 授權(quán)。其 WSGI 工具箱采用 Werkzeug,模板引擎則使用 Jinja2。除了 Werkzeug 和 Jinja2 以外幾乎不依賴任何外部庫(kù)。因?yàn)?Flask 被稱為輕量級(jí)框架。
Flask 的會(huì)話會(huì)話使用簽名 cookie 來(lái)允許用戶查看和修改會(huì)話內(nèi)容。它會(huì)記錄從一個(gè)請(qǐng)求到另一個(gè)請(qǐng)求的信息。但如果要修改會(huì)話,則必須有密鑰 Flask.secret_key。
我們將在后續(xù)的課程中進(jìn)一步討論 Flask。
Q.8. 如何在 Python 中管理內(nèi)存?
Python 用一個(gè)私有堆內(nèi)存空間來(lái)放置所有對(duì)象和數(shù)據(jù)結(jié)構(gòu),我們無(wú)法訪問(wèn)它。由解釋器來(lái)管理它。不過(guò)使用一些核心 API,我們可以訪問(wèn)一些 Python 內(nèi)存管理工具控制內(nèi)存分配。
Q.9. 解釋 Python 中的 help() 函數(shù)和 dir() 函數(shù)。
help() 函數(shù)返回幫助文檔和參數(shù)說(shuō)明:
運(yùn)行結(jié)果如下:
Help on function copy in module copy
copy(x)
Shallow copy operation on arbitrary Python objects.
See the module』s __doc__ string for more info.
dir() 函數(shù)返回對(duì)象中的所有成員 (任何類型)
Q.10. 當(dāng)退出 Python 時(shí)是否釋放所有內(nèi)存分配?
答案是否定的。那些具有對(duì)象循環(huán)引用或者全局命名空間引用的變量,在 Python 退出是往往不會(huì)被釋放
另外不會(huì)釋放 C 庫(kù)保留的部分內(nèi)容。
Q.11. 什么是猴子補(bǔ)???
在運(yùn)行時(shí)動(dòng)態(tài)修改類和模塊
Hi, monkey
Q.12. 什么是 Python 字典?
字典是我在 C++和 Java 中沒(méi)有見過(guò)的數(shù)據(jù)結(jié)構(gòu),它擁有鍵-值對(duì)
3
字典是可變的,我們也可以用推導(dǎo)式的方式創(chuàng)建它.
{25: 5, 16: 4, 9: 3, 4: 2, 1: 1}
要了解更多字典的內(nèi)容請(qǐng)點(diǎn)擊 Python Dictionaries( https://data-flair.training/blogs/python-dictionaries/)
Q.13. 能否解釋一下 *args 和 **kwargs?
如果我們不知道將多少個(gè)參數(shù)傳遞給函數(shù),比如當(dāng)我們想傳遞一個(gè)列表或一個(gè)元組值時(shí),就可以使用*args。
3
2
1
4
7
當(dāng)我們不知道將會(huì)傳入多少關(guān)鍵字參數(shù)時(shí),使用**kwargs 會(huì)收集關(guān)鍵字參數(shù)。
a.1
b.2
c.7
使用 args 和 kwargs 作為參數(shù)名只是舉例,可以任意替換。
對(duì)于 Python 的基礎(chǔ)題任何疑問(wèn),請(qǐng)?jiān)谠u(píng)論區(qū)提問(wèn)。
Q.14. 編程實(shí)現(xiàn)計(jì)算文件中的大寫字母數(shù)
26
Q.15. 什么是負(fù)索引?
我們先創(chuàng)建如下列表:
與正索引不同,負(fù)索引是從右邊開始檢索。
6
同樣可以用于列表的切片:
[3, 4, 5, 6, 7]
Q.16. 如何隨機(jī)打亂列表中元素,要求不引用額外的內(nèi)存空間?
我們用 random 包中的 shuffle() 函數(shù)來(lái)實(shí)現(xiàn)。
[3, 4, 8, 0, 5, 7, 6, 2, 1]
Q.17. 解釋 Python 中的 join() 和 split() 函數(shù)
join() 函數(shù)可以將指定的字符添加到字符串中。
‘1,2,3,4,5’
split() 函數(shù)可以用指定的字符分割字符串
[‘1’, ‘2’, ‘3’, ‘4’, ‘5’]
Q.18. Python 區(qū)分大小寫嗎?
驗(yàn)證 Python 是否區(qū)分大小寫的方法是測(cè)試 myname 和 Myname 在程序中是不是算同一個(gè)標(biāo)識(shí)符。觀察以下代碼的返回結(jié)果:
Myname
NameError: name ‘Myname’ is not defined
如你所見,這里出現(xiàn)了 NameError,所以 Python 是區(qū)分大小的語(yǔ)言。
Q.19. Python 中標(biāo)識(shí)符的命名規(guī)則?
Python 中的標(biāo)識(shí)符可以是任意長(zhǎng)度,但必須遵循以下命名規(guī)則:
1. 只能以下劃線或者 A-Z/a-z 中的字母開頭。
2. 其余部分只能使用 A-Z/a-z/0-9。
3. Python 標(biāo)識(shí)符區(qū)分大小寫。
4. 關(guān)鍵字不能作為標(biāo)識(shí)符。Python 有以下這些關(guān)鍵字:
Q.20. 如何刪除字符串中的前置空格
前置空格是第一個(gè)非空格字符前的所有空格,使用 lstrip() 函數(shù)來(lái)刪除.
如圖這個(gè)字符串既包含前置空格也包含后置空格. 調(diào)用 lstrip() 函數(shù)去除了前置空格。如果想去除后置空格,使用 rstrip() 函數(shù)。
‘ Ayushi’
以上是面向 Python 新手的基礎(chǔ)題部分。
3. Python 面試進(jìn)階題
Q. 21 至 Q. 35 是針對(duì)有經(jīng)驗(yàn)者的一些 Python 面試問(wèn)題及其答案和示例。
Q.21. 如何將字符串轉(zhuǎn)換為小寫?
使用 lower() 函數(shù)
‘a(chǎn)yushi’
轉(zhuǎn)換為大寫用 upper() 函數(shù)
‘AYUSHI’
要檢查字符串是否為全大寫或全小寫,使用 isupper() 和 islower() 函數(shù)
像 @ 和$這樣的字符即滿足大寫也滿足小寫。
istitle() 可以檢查字符串是否是標(biāo)題格式。
True
Q.22. Python 中的 pass 語(yǔ)句有什么作用?
我們?cè)趯懘a時(shí),有時(shí)可能只寫了函數(shù)聲明而沒(méi)想好函數(shù)怎么寫,但為了保證語(yǔ)法檢查的正確必須輸入一些東西。在這種情況下,我們使用 pass 語(yǔ)句。
類似的 break 語(yǔ)句可以跳出循環(huán)。
0
1
2
continue 語(yǔ)句可以跳到下一輪循環(huán)。
0
1
2
4
5
6
Q.23. 請(qǐng)解釋 Python 中的閉包?
如果在一個(gè)內(nèi)部函數(shù)里。對(duì)在外部作用域(但不是在全局作用域)的變量進(jìn)行引用,那么內(nèi)部函數(shù)就是一個(gè)閉包。
7
閉包的詳細(xì)解釋請(qǐng)點(diǎn)擊 Closures in Python。(https://data-flair.training/blogs/python-closure/)
Q.24. 解釋 Python 中的//,%和**運(yùn)算符
//運(yùn)算符執(zhí)行地板除法,返回結(jié)果的整數(shù)部分 (向下取整)。
3
用/符號(hào)除法結(jié)果為 3.5。
**符號(hào)表示取冪. a**b 返回 a 的 b 次方
1024
% 是取模符號(hào)。返回除法后的余數(shù)。
6
0.5
對(duì)于 Python 進(jìn)階面試問(wèn)題和答案有任何疑問(wèn)請(qǐng)?jiān)谠u(píng)論區(qū)提問(wèn)。
Q.24. Python 中有多少種運(yùn)算符,解釋算術(shù)運(yùn)算符。
這類面試問(wèn)題可以判斷你的 Python 功底,可以舉一些實(shí)例來(lái)回答這類問(wèn)題。
在 Python 中我們有 7 中運(yùn)算符:算術(shù)運(yùn)算符、關(guān)系 (比較) 運(yùn)算符、賦值運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符、成員運(yùn)算符、身份運(yùn)算符。
1. 加號(hào) (+) 將兩個(gè)對(duì)象的值相加。
15
2. 減號(hào) (-) 將第一個(gè)對(duì)象的值減去第二個(gè)對(duì)象的值。
-1
3. 乘號(hào) (*) 將兩個(gè)對(duì)象的值相乘。
56
4. 除號(hào) (/) 將第一個(gè)對(duì)象的值除以第二個(gè)對(duì)象的值。
0.875
1.0
關(guān)于地板除法、取模和取冪,請(qǐng)參考上一個(gè)問(wèn)題。
Q.25. 解釋 Python 中的關(guān)系運(yùn)算符。
關(guān)系運(yùn)算符用來(lái)比較兩個(gè)對(duì)象。
1. 判斷小于 (<):如果符號(hào)左邊的值比右邊小則返回 True。
False
2. 判斷大于 (>):如果符號(hào)左邊的值比右邊大則返回 True。
True
出現(xiàn)上面的錯(cuò)誤結(jié)果是因?yàn)?Python 的浮點(diǎn)運(yùn)算存在一些 Bug。
3. 判斷小于等于 (<=):如果符號(hào)左邊的值小于或等于右邊則返回 True。
True
4. 大判斷于等于 (>=):如果符號(hào)左邊的值大于或等于右邊則返回 True。
True
5. 判斷等于 (==) 如果符號(hào)兩邊的值相等則返回 True。
True
6. 判斷不等于 (!=) 如果符號(hào)兩邊的值不等則返回 True。
True
True
Q.26. 解釋 Python 中的賦值和算數(shù)運(yùn)算符?
這是面試中的常見題目。我們將算數(shù)運(yùn)算符和賦值符號(hào)放在一起介紹。
Q.27. 解釋 Python 中的邏輯運(yùn)算符
Python 中有三個(gè)邏輯運(yùn)算符:and、or、not
Q.28. 解釋 Python 中的成員運(yùn)算符
使用 in 和 not in 運(yùn)算符我們可以判斷某個(gè)值是否在成員中。
Q.29. 解釋 Python 中的身份運(yùn)算符
這是非常常見的 Python 面試題,用下面的示例來(lái)回答.
is 和 not is 運(yùn)算符可以判斷兩個(gè)對(duì)象是否相同
Q.30. 解釋 Python 中的位運(yùn)算符
此運(yùn)算符按二進(jìn)制位對(duì)值進(jìn)行操作。
1. 與 (&) 返回按位與結(jié)果
2. 或 (|) 返回按位或結(jié)果
3. 異或 (^) 返回按位異或結(jié)果
1
4. 取反 (~) 返回按位取反結(jié)果
-3
5. 左移位 (<<) 將符號(hào)左邊數(shù)的二進(jìn)制左移右邊數(shù)位
4
1 的二級(jí)制 001 左移 2 位變成 100 也即十進(jìn)制的 4
6. 右移位 (>>)
1
想了解關(guān)于位運(yùn)算符的更多內(nèi)容請(qǐng)點(diǎn)擊 Operators in Python(https://data-flair.training/blogs/python-operators/)
Q.31. 如何在 Python 使用多進(jìn)制數(shù)字?
除十進(jìn)制以外,在 Python 中還可以使用二進(jìn)制、八進(jìn)制、十六進(jìn)制。
1. 二進(jìn)制數(shù)有 0 和 1 組成,我們使用 0b 或 0B 前綴表示二進(jìn)制數(shù)
10
使用 bin() 函數(shù)可以將數(shù)字轉(zhuǎn)換為二進(jìn)制
‘0b1111’
2. 八進(jìn)制數(shù)由數(shù)字 0-7 組成,使用前綴 0o 或 0O 表示 8 進(jìn)制數(shù)
‘0o10’
3. 十六進(jìn)數(shù)由數(shù)字 0-15 組成,使用前綴 0x 或者 0X 表示 16 進(jìn)制數(shù)
‘0x10’
‘0xf’
Q.32. 如何獲取字典中的所有鍵?
使用 keys() 來(lái)獲取字典中的所有鍵
Q.33. 問(wèn)什么標(biāo)識(shí)符不建議使用下劃線開頭?
因?yàn)樵?Python 中以下劃線開頭的變量為私有變量,如果你不想讓變量私有,就不要使用下劃線開頭。
Q.34. 如何聲明多個(gè)變量并賦值?
有兩種方式:
Q.35. 什么是元組的解封裝?
首先我們來(lái)介紹元組封裝:
(3, 4, 5)
將 3,4,5 封裝到元組 mytuple 中。
現(xiàn)在我們要將這些值解封裝到變量 x,y,z 中
12
以上是 Python 高級(jí)面試問(wèn)題和答案,新手也可以參考這些問(wèn)題以獲得進(jìn)階的 Python 知識(shí)。
4. 結(jié)束語(yǔ)
本篇文章介紹了一些重要的 Python 面試問(wèn)題和答案,后續(xù)我們還會(huì)增加。在你面試之前應(yīng)該熟練掌握這些。如有想添加的問(wèn)題歡迎隨時(shí)評(píng)論。
原文鏈接:https://data-flair.training/blogs/top-python-interview-questions-answer/
聯(lián)系客服