30道python真實面試題(附答案)
最近收集整理了100道python真實面試筆試題,並自己做了一些,希望能幫助大家,順利早日找到工作,限於篇幅問題,本文附有30道面試題計算答案。
學習Python中有不明白推薦加入交流群
號:516107834
群裡有志同道合的小夥伴,互幫互助,
群裡有不錯的學習教程!
1、一行程式碼實現1--100之和
利用sum()函式求和
2、如何在一個函式內部修改全域性變數
利用global 修改全域性變數
3、列出5個python標準庫
os:提供了不少與作業系統相關聯的函式
sys: 通常用於命令列引數
re: 正則匹配
math: 數學運算
datetime:處理日期時間
4、字典如何刪除鍵和合並兩個字典
del和update方法
5、談下python的GIL
GIL 是python的全域性直譯器鎖,同一程序中假如有多個執行緒執行,一個執行緒在執行python程式的時候會霸佔python直譯器(加了一把鎖即GIL),使該程序內的其他執行緒無法執行,等該執行緒執行完後其他執行緒才能執行。如果執行緒執行過程中遇到耗時操作,則直譯器鎖解開,使其他執行緒執行。所以在多執行緒中,執行緒的執行仍是有先後順序的,並不是同時進行。
多程序中因為每個程序都能被系統分配資源,相當於每個程序有了一個python直譯器,所以多程序可以實現多個程序的同時執行,缺點是程序系統資源開銷大
6、python實現列表去重的方法
先通過集合去重,在轉列表
7、fun(*args,**kwargs)中的*args,**kwargs什麼意思?
8、python2和python3的range(100)的區別
python2返回列表,python3返回迭代器,節約記憶體
9、一句話解釋什麼樣的語言能夠用裝飾器?
函式可以作為引數傳遞的語言,可以使用裝飾器
10、python內建資料型別有哪些
整型--int
布林型--bool
字串--str
列表--list
元組--tuple
字典--dict
11、簡述面向物件中__new__和__init__區別
__init__是初始化方法,建立物件後,就立刻被預設呼叫了,可接收引數,如圖
1、__new__至少要有一個引數cls,代表當前類,此引數在例項化時由Python直譯器自動識別
2、__new__必須要有返回值,返回例項化出來的例項,這點在自己實現__new__時要特別注意,可以return父類(通過super(當前類名, cls))__new__出來的例項,或者直接是object的__new__出來的例項
3、__init__有一個引數self,就是這個__new__返回的例項,__init__在__new__的基礎上可以完成一些其它初始化的動作,__init__不需要返回值
4、如果__new__建立的是當前類的例項,會自動呼叫__init__函式,通過return語句裡面呼叫的__new__函式的第一個引數是cls來保證是當前類例項,如果是其他類的類名,;那麼實際建立返回的就是其他類的例項,其實就不會呼叫當前類的__init__函式,也不會呼叫其他類的__init__函式。
12、簡述with方法開啟處理檔案幫我我們做了什麼?
開啟檔案在進行讀寫的時候可能會出現一些異常狀況,如果按照常規的f.open
寫法,我們需要try,except,finally,做異常判斷,並且檔案最終不管遇到什麼情況,都要執行finally f.close()關閉檔案,with方法幫我們實現了finally中f.close
(當然還有其他自定義功能,有興趣可以研究with方法原始碼)
13、列表[1,2,3,4,5],請使用map()函式輸出[1,4,9,16,25],並使用列表推導式提取出大於10的數,最終輸出[16,25]
map()函式第一個引數是fun,第二個引數是一般是list,第三個引數可以寫list,也可以不寫,根據需求
14、python中生成隨機整數、隨機小數、0--1之間小數方法
隨機整數:random.randint(a,b),生成區間內的整數
隨機小數:習慣用numpy庫,利用np.random.randn(5)生成5個隨機小數
0-1隨機小數:random.random(),括號中不傳參
15、避免轉義給字串加哪個字母表示原始字串?
r , 表示需要原始字串,不轉義特殊字元
16、<div class="nam">中國</div>,用正則匹配出標籤裡面的內容(“中國”),其中class的類名是不確定的
17、python中斷言方法舉例
assert()方法,斷言成功,則程式繼續執行,斷言失敗,則程式報錯
18、資料表student有id,name,score,city欄位,其中name中的名字可有重複,需要消除重複行,請寫sql語句
select distinct name from student
19、10個Linux常用命令
ls pwd cd touch rm mkdir tree cp mv cat more grep echo
20、python2和python3區別?列舉5個
1、Python3 使用 print 必須要以小括號包裹列印內容,比如 print('hi')
Python2 既可以使用帶小括號的方式,也可以使用一個空格來分隔列印內容,比如 print 'hi'
2、python2 range(1,10)返回列表,python3中返回迭代器,節約記憶體
3、python2中使用ascii編碼,python中使用utf-8編碼
4、python2中unicode表示字串序列,str表示位元組序列
python3中str表示字串序列,byte表示位元組序列
5、python2中為正常顯示中文,引入coding宣告,python3中不需要
6、python2中是raw_input()函式,python3中是input()函式
21、列出python中可變資料型別和不可變資料型別,並簡述原理
不可變資料型別:數值型、字串型string和元組tuple
不允許變數的值發生變化,如果改變了變數的值,相當於是新建了一個物件,而對於相同的值的物件,在記憶體中則只有一個物件(一個地址),如下圖用id()方法可以列印物件的id
可變資料型別:列表list和字典dict;
允許變數的值發生變化,即如果對變數進行append、+=等這種操作後,只是改變了變數的值,而不會新建一個物件,變數引用的物件的地址也不會變化,不過對於相同的值的不同物件,在記憶體中則會存在不同的物件,即每個物件都有自己的地址,相當於記憶體中對於同值的物件儲存了多份,這裡不存在引用計數,是實實在在的物件。
22、s = "ajldjlajfdljfddd",去重並從小到大排序輸出"adfjl"
可變資料型別:列表list和字典dict;
允許變數的值發生變化,即如果對變數進行append、+=等這種操作後,只是改變了變數的值,而不會新建一個物件,變數引用的物件的地址也不會變化,不過對於相同的值的不同物件,在記憶體中則會存在不同的物件,即每個物件都有自己的地址,相當於記憶體中對於同值的物件儲存了多份,這裡不存在引用計數,是實實在在的物件。
23、用lambda函式實現兩個數相乘
24、字典根據鍵從小到大排序dict={"name":"zs","age":18,"city":"深圳","tel":"1362626627"}
25、利用collections庫的Counter方法統計字串每個單詞出現的次數"kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h"
26、字串a = "not 404 found 張三 99 深圳",每個詞中間是空格,用正則過濾掉英文和數字,最終輸出"張三 深圳"
順便貼上匹配小數的程式碼,雖然能匹配,但是健壯性有待進一步確認
27、filter方法求出列表所有奇數並構造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
filter() 函式用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。該接收兩個引數,第一個為函式,第二個為序列,序列的每個元素作為引數傳遞給函式進行判,然後返回 True 或 False,最後將返回 True 的元素放到新列表
28、列表推導式求列表所有奇數並構造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
29、正則re.complie作用
re.compile是將正則表示式編譯成一個物件,加快速度,並重復使用
30、a=(1,)b=(1),c=("1") 分別是什麼型別的資料?