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