1. 程式人生 > >51道Python面試題之1-13

51道Python面試題之1-13

方法 ati 影響 推導式 all 混合繼承 拷貝 的區別 放置

Q.1. Python 的特點和優點是什麽?

Python 可以作為編程的入門語言,因為他具備以下特質:
1.解釋性

  1. 動態特性
  2. 面向對象
  3. 語法簡潔
  4. 開源
  5. 豐富的社區資源

Q.2. 深拷貝和淺拷貝的區別是什麽?

深拷貝是將對象本身復制給另一個對象。這意味著如果對對象的副本進行更改時不會影響原對象。在 Python 中,我們使用 deepcopy函數進行深拷貝,使用方法如下:
技術分享圖片

深拷貝-Python 面試問題及答案
淺拷貝是將對象的引用復制給另一個對象。因此,如果我們在副本中進行更改,則會影響原對象。使用 copy函數進行淺拷貝,使用方法如下:
技術分享圖片

淺拷貝—Python 面試問題及答案

Q.3. 列表和元祖有什麽不同?

主要區別在於列表是可變的,元祖是不可變的。看下面的例子:
技術分享圖片

會出現以下錯誤提示:
TypeError: ‘tuple’ object does not support item assignment

Q.4. 解釋 Python 中的三元表達式

與 C++不同, 在 Python 中我們不需要使用 ? 符號,而是使用如下語法:
[on true] if [expression]else [on false]

如果 [expression] 為真, 則 [on true] 部分被執行。如果表示為假則 [on false] 部分被執行

下面是例子:
技術分享圖片

輸出:2
技術分享圖片

輸出:Hi

Q.5. Python 中如何實現多線程?

線程是輕量級的進程,多線程允許一次執行多個線程。眾所周知,Python 是一種多線程語言,它有一個多線程包。

GIL(全局解釋器鎖)確保一次執行單個線程。一個線程保存 GIL 並在將其傳遞給下一個線程之前執行一些操作,這就產生了並行執行的錯覺。但實際上,只是線程輪流在 CPU 上。當然,所有傳遞都會增加執行的開銷。

Q.6. 解釋繼承

一個類繼承自另一個類,也可以說是一個孩子類/派生類/子類,繼承自父類/基類/超類,同時獲取所有的類成員(屬性和方法)。

繼承使我們可以重用代碼,並且還可以更方便地創建和維護代碼。Python 支持以下類型的繼承:

  1. 單繼承- 一個子類類繼承自單個基類
  2. 多重繼承- 一個子類繼承自多個基類
  3. 多級繼承- 一個子類繼承自一個基類,而基類繼承自另一個基類
  4. 分層繼承- 多個子類繼承自同一個基類
  5. 混合繼承- 兩種或兩種以上繼承類型的組合

Q.7. 什麽是 Flask?

Flask 是一個使用 Python 編寫的輕量級 Web 應用框架,使用 BSD 授權。其 WSGI 工具箱采用 Werkzeug,模板引擎則使用 Jinja2。除了 Werkzeug 和 Jinja2 以外幾乎不依賴任何外部庫。因為 Flask 被稱為輕量級框架。

Flask 的會話會話使用簽名 cookie 來允許用戶查看和修改會話內容。它會記錄從一個請求到另一個請求的信息。但如果要修改會話,則必須有密鑰 Flask.secret_key。

Q.8. 如何在 Python 中管理內存?

Python 用一個私有堆內存空間來放置所有對象和數據結構,我們無法訪問它。由解釋器來管理它。不過使用一些核心 API,我們可以訪問一些 Python 內存管理工具控制內存分配。

Q.9. 解釋 Python 中的 help 函數和 dir 函數。

help 函數返回幫助文檔和參數說明:
技術分享圖片

運行結果如下:
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 函數返回對象中的所有成員 (任何類型)
技術分享圖片

Q.10. 當退出 Python 時是否釋放所有內存分配?

答案是否定的。那些具有對象循環引用或者全局命名空間引用的變量,在 Python 退出是往往不會被釋放.
另外不會釋放 C 庫保留的部分內容。

Q.11. 什麽是猴子補丁?

在運行時動態修改類和模塊
技術分享圖片

Hi, monkey

Q.12. 什麽是 Python 字典?

字典是我在 C++和 Java 中沒有見過的數據結構,它擁有鍵-值對
技術分享圖片

3
字典是可變的,我們也可以用推導式的方式創建它.
技術分享圖片

Q.13. 能否解釋一下 *args 和 **kwargs?
如果我們不知道將多少個參數傳遞給函數,比如當我們想傳遞一個列表或一個元組值時,就可以使用*args。
技術分享圖片

3
2
1
4
7
當我們不知道將會傳入多少關鍵字參數時,使用**kwargs 會收集關鍵字參數。
技術分享圖片

a.1
b.2
c.7
使用 args 和 kwargs 作為參數名只是舉例,可以任意替換。
對於 Python 的基礎題任何疑問,請在評論區提問。

51道Python面試題之1-13