20道python面試題,看完不用愁!

陝西優就業發表於2020-01-02

  對於機器學習演算法工程師而言,Python是不可或缺的語言,它的優美與簡潔令人無法自拔。那麼你瞭解過Python程式設計面試題嗎?今天 陝西優就業小編帶大家來了解一下!

  1、python下多執行緒的限制以及多程式中傳遞引數的方式

  python多執行緒有個全域性直譯器鎖(global interpreter lock),這個鎖的意思是任一時間只能有一個執行緒使用直譯器,跟單cpu跑多個程式一個意思,大家都是輪著用的,這叫“併發”,不是“並行”。

  多程式間共享資料,可以使用 multiprocessing.Value和multiprocessing.Array。

  2、什麼是lambda函式?它有什麼好處?

  lambda 函式是一個可以接收任意多個引數(包括可選引數)並且返回單個表示式值的函式。lambda 函式不能包含命令,它們所包含的表示式不能超過一個。不要試圖向lambda 函式中塞入太多的東西;如果你需要更復雜的東西,應該定義一個普通函式,然後想讓它多長就多長。

  3、Python是如何進行型別轉換的?

  ①函式描述

  ② int(x [,base ]) 將x轉換為一個整數

  ③long(x [,base ]) 將x轉換為一個長整數

  ④float(x ) 將x轉換到一個浮點數

  ⑤complex(real [,imag ]) 建立一個複數

  ⑥str(x ) 將物件 x 轉換為字串

  ⑦repr(x ) 將物件 x 轉換為表示式字串

  ⑧eval(str ) 用來計算在字串中的有效Python表示式,並返回一個物件

  ⑨tuple(s ) 將序列 s 轉換為一個元組

  ⑩list(s ) 將序列 s 轉換為一個列表

  ⑪chr(x ) 將一個整數轉換為一個字元

  ⑫unichr(x ) 將一個整數轉換為Unicode字元

  ⑬ord(x ) 將一個字元轉換為它的整數值

  ⑭hex(x ) 將一個整數轉換為一個十六進位制字串

  ⑮oct(x ) 將一個整數轉換為一個八進位制字串

  4、python多執行緒與多程式的區別

  在UNIX平臺上,當某個程式終結之後,該程式需要被其父程式呼叫wait,否則程式成為殭屍程式(Zombie)。所以,有必要對每個Process物件呼叫join()方法 (實際上等同於wait)。對於多執行緒來說,由於只有一個程式,所以不存在此必要性。

  多程式應該避免共享資源。在多執行緒中,我們可以比較容易地共享資源,比如使用全域性變數或者傳遞引數。在多程式情況下,由於每個程式有自己獨立的記憶體空間,以上方法並不合適。此時我們可以透過共享記憶體和Manager的方法來共享資源。但這樣做提高了程式的複雜度,並因為同步的需要而降低了程式的效率。

  5、Python裡面如何複製一個物件?

  標準庫中的copy模組提供了兩個方法來實現複製。一個方法是copy,它返回和引數包含內容一樣的物件。使用deepcopy方法,物件中的屬性也被複制。

  6、介紹一下except的用法和作用?

  Python的except用來捕獲所有異常,因為Python裡面的每次錯誤都會丟擲一個異常,所以每個程式的錯誤都被當作一個執行時錯誤。

  7、Python中pass語句的作用是什麼?

  pass語句什麼也不做,一般作為佔位符或者建立佔位程式,pass語句不會執行任何操作。

  8、Python直譯器種類以及特點?

  Python是一門直譯器語言,程式碼想執行,必須透過直譯器執行,Python存在多種直譯器,分別基於不同語言開發,每個直譯器有不同的特點,但都能正常執行Python程式碼,以下是常用的五種Python直譯器:

  CPython:當從Python官方網站下載並安裝好Python2.7後,就直接獲得了一個官方版本的直譯器:Cpython,這個直譯器是用C語言開發的,所以叫CPython,在命名行下執行python,就是啟動CPython直譯器,CPython是使用最廣的Python直譯器。

  IPython:IPython是基於CPython之上的一個互動式直譯器,也就是說,IPython只是在互動方式上有所增強,但是執行Python程式碼的功能和CPython是完全一樣的,好比很多國產瀏覽器雖然外觀不同,但核心其實是呼叫了IE。

  PyPy:PyPy是另一個Python直譯器,它的目標是執行速度,PyPy採用JIT技術,對Python代進行動態編譯,所以可以顯著提高Python程式碼的執行速度。

  Jython:Jython是執行在Java平臺上的Python直譯器,可以直接把Python程式碼編譯成Java位元組碼執行。

  IronPython:IronPython和Jython類似,只不過IronPython是執行在微軟.Net平臺上的Python直譯器,可以直接把Python程式碼編譯成.Net的位元組碼。

  在Python的直譯器中,使用廣泛的是CPython,對於Python的編譯,除了可以採用以上直譯器進行編譯外,技術高超的開發者還可以按照自己的需求自行編寫Python直譯器來執行Python程式碼,十分的方便!

  9、列舉布林值為False的常見值?

  0, [] , () , {} , '' , False , None

  10、字串、列表、元組、字典每個常用的5個方法?

  字串:repleace,strip,split,reverse,upper,lower,join.....

  列表:append,pop,,remove,sort,count,index.....

  元組:index,count,__len__(),__dir__()

  字典:get,keys,values,pop,popitems,clear,,items.....

  11、lambda表示式格式以及應用場景?

  表示式格式:lambda後面跟一個或多個引數,緊跟一個冒號,以後是一個表示式。冒號前是引數,冒號後是返回值。例如:lambda x : 2x

  應用場景:經常與一些內建函式相結合使用,比如說map(),filter(),sorted(),reduce()等

  12、pass的作用?

  ①空語句do nothing;

  ②保證格式完整;

  ③保證語義完整。

  13、arg和 *kwarg作用?

  萬能引數,解決了函式引數不固定的問題

  *arg:會把位置引數轉化為tuple

  **kwarg:會把關鍵字引數轉化為dict

  14、、is和==的區別?

  is:判斷記憶體地址是否相等;

  ==:判斷數值是否相等。

  15、、簡述Python的深淺複製以及應用場景?

  copy():淺copy,淺複製指僅僅複製資料集合的第一層資料

  deepcopy():深copy,深複製指複製資料集合的所有層

  16、Python垃圾回收機制?

  python採用的是引用計數機制為主,標記-清除和分代收集(隔代回收、分代回收)兩種機制為輔的策略

  計數機制:

  Python的GC模組主要運用了引用計數來跟蹤和回收垃圾。在引用計數的基礎上,還可以透過“標記-清除”

  解決容器物件可能產生的迴圈引用的問題。透過分代回收以空間換取時間進一步提高垃圾回收的效率。

  標記-清除:

  標記-清除的出現打破了迴圈引用,也就是它只關注那些可能會產生迴圈引用的物件。

  缺點:該機制所帶來的額外操作和需要回收的記憶體塊成正比。

  隔代回收:

  原理:將系統中的所有記憶體塊根據其存活時間劃分為不同的集合,每一個集合就成為一個“代”,

  垃圾收集的頻率隨著“代”的存活時間的增大而減小。也就是說,活得越長的物件,就越不可能是垃圾,

  就應該減少對它的垃圾收集頻率。那麼如何來衡量這個存活時間:通常是利用幾次垃圾收集動作來衡量,

  如果一個物件經過的垃圾收集次數越多,可以得出:該物件存活時間就越長。

  17、python的可變型別和不可變型別?

  不可變型別(數字、字串、元組、不可變集合);

  可變型別(列表、字典、可變集合)。

  18、Python裡面search()和match()的區別?

  match()函式只檢測RE是不是在string的開始位置匹配,search()會掃描整個string查詢匹配, 也就是說match()只有在0位置匹配成功的話才有返回,如果不是開始位置匹配成功的話,match()就返回none

  19、用Python匹配HTML tag的時候,<.*>和<.*?>有什麼區別?

  前者是貪婪匹配,會從頭到尾匹配 ,而後者是非貪婪匹配,只匹配到第一個 >。

  20、Python裡面如何生成隨機數?

  import random;

  random.random();

  它會返回一個隨機的0和1之間的浮點數。

推薦閱讀

http://blog.itpub.net/69902581/viewspace-2668444/程式設計師35歲不焦慮,該怎麼做?


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69902581/viewspace-2671661/,如需轉載,請註明出處,否則將追究法律責任。

相關文章