Github上有大佬(@DasyDong)整理了150道Python面試題,想要從事Python方向崗位的同學不妨學習和收藏一下,給你在求職路上多一點指引。
計畫地址:
https://github.com/DasyDong/interview/blob/master/notes/python_interview.md
以下摘錄部份常見的面試題及解答分享給大家。
python2和python3區別?
Python3 使用 print 必須要以小括弧包裹打印內容,比如 print('hi')
Python2 既可以使用帶小括弧的方式,也可以使用一個空格來分隔打印內容,比如 print 'hi'
P ython2 range(1,10)返回列表,python3中返回叠代器,節約記憶體
P ython2 中使用 ascii 編碼,python中使用 utf-8 編碼
P ython2 中 unicode 表示字串序列,str 表示字節序列
P ython3 中 str 表示字串序列,byte 表示字節序列
P ython2 中為正常顯示中文,引入 coding 聲明,python3 中不需要
P ython2 中是 raw_input() 函式,python3 中是input()函式
Python程式碼中_args, *_kwargs 含義及用法?
args: arguments 的縮寫,表示位置參數
kwargs: keyword arguments 的縮寫,表示關鍵字參數
請列出 5 個 python 標準庫?
os:提供了不少與作業系統相關聯的函式
sys: 通常用於命令列參數
re: 正則匹配
math: 數學運算
datetime:處理日期時間
Python的可變數據型別和不可變數據型別分別有?
可變數據型別:列表、字典、集合
不可變數據型別:數位、字串、元組
Python 中魔法方法和其用途?
__init__
:物件初始化方法
__new__
:建立物件時候執行的方法,單列模式會用到
__str__
:當使用print輸出物件的時候,只要自己定義了__str__(self)方法,那麽就會打印從在這個方法中return的數據
__del__
:刪除物件執行的方法
Python 中os和sys模組的作用分別是?
os模組:負責程式與作業系統的互動,提供了存取作業系統底層的介面。sys模組:負責程式與python直譯器的互動,提供了一系列的函式和變量,用於操控python的執行時環境。
簡述Python參照計數機制?
python垃圾回收主要以參照計數為主,標記-清除和分代清除為輔的機制,其中標記-清除和分代回收主要是為了處理迴圈參照的難題。
Python賦值、淺拷貝和深拷貝的區別?
Python 有 3 種賦值方式:直接賦值、淺拷貝、深拷貝;
直接賦值:就是物件的參照。(相當於給原來的物件起個別名),比如有個人叫張三,外號叫小張,物件的參照就是類似,雖然換個名字,但是兩個名字指的是同一個人。
淺拷貝,拷貝的是父物件,不會拷貝到內部的子物件。(單從
淺
字就可以看出拷貝的東西不深,可以理解為只拷貝一層) { 1、完全切片方法;2、工廠函式,如 list();3、copy 模組的 copy()函式 }
深拷貝,包含物件裏面的自物件的拷貝(可以理解為複制,全拷貝過去但是兩者沒有任何關系了,各自是各自的);所以原始物件的改變不會造成深拷貝裏任何子元素的改變 { copy 模組的
deep.deepcopy()
函式 }
請闡述在Python中split(),sub(),subn()的功能分別是什麽?
split(): 使用正規表式模式將給定字串「拆分」到列表中。
sub(): 尋找正規表式模式匹配的所有子字串,然後用不同的字串替換它們
subn(): 它類似於sub(),並且還返回新字串。
舉例 sort 和 sorted方法的區別?
使用 sort()方法對 list 排序會修改 list 本身,不會返回新 list,sort()不能對 dict 字典進行排序;
sorted 方法對可叠代的序列排序生成新的序列,對 dict 排序預設會按照 dict 的 key 值進行排序,最後返回的結果是一個對 key 值排序好的list;
sorted 對 tuple, dict 依然有效,而 sort 不行;
解釋 Python 中的可變型別和不可變型別?
1.Python中的可變型別有list,dict;不可變型別有string,number,tuple.
2.當進行修改操作時,可變型別傳遞的是記憶體中的地址,也就是說,直接修改記憶體中的值,並沒有開辟新的記憶體。
3.不可變型別被改變時,並沒有改變原記憶體地址中的值,而是開辟一塊新的記憶體,將原地址中的值復制過去,對這塊新開辟的記憶體中的值進行操作。
Python 中類方法、類例項方法、靜態方法有何區別?
類方法:
是類物件的方法,在定義時需要在上方使用
@ classmethod
進行裝飾,形參為
cls
,表示類物件,類物件和例項物件都可呼叫
類例項方法:
是類例項化物件的方法,只能由例項物件呼叫,形參為
self
,指代物件本身;
靜態方法:
是一個任意函式,在其上方使用
@staticmethod
進行裝飾,例項物件和類物件都可以呼叫。但是方法體中不能使用類或例項的任何內容和方法。
Python 中編寫函式的原則?
Python 中編寫函式的原則有 4 個,分別有:
函式設計要盡量短小,巢狀層次不宜過深。避免過長函式,巢狀最好能控制在3層之內
函式申明應該合理,簡單,易於使用。除函式名能夠夠正確反映其大體功能外,參數的設計也應該簡潔明了,參數個數不宜太多
函式參數設計應該考慮向下相容。可以透過加入預設參數來避免退化
一個函式只做一件事,就要盡量保證抽象層級的一致性,所有語句盡量在一個粒度上。若在一個函式中處理多件事,不利於程式碼的重用;
請闡述同步,異步,阻塞,非阻塞的概念?
同步: 多個任務之間有先後順序執行,一個執行完下個才能執行。
異步: 多個任務之間沒有先後順序,可以同時執行,有時候一個任務可能要在必要的時候獲取另一個同時執行的任務的結果,這個就叫回呼!
阻塞: 如果卡住了呼叫者,呼叫者不能繼續往下執行,就是說呼叫者阻塞了。
非阻塞: 如果不會卡住,可以繼續執行,就是說非阻塞的。
同步異步相對於多工而言,阻塞非阻塞相對於程式碼執行而言。
合並兩個列表並去除重復元素?
list1 = ['b','c','c','a','f','r','y','e','e']
list2 = ['t','y','x','y','z','e','f']
def merge_list(*args):
s = set()
for i in args:
s = s.union(i)
print(s)
return s
merge_list(list1,list2)
如何查詢和替換一個文本中的字串?
tempstr = "hello python,you,me,world"
print(tempstr.replace("hello","python"))
#還可以使用正則,有個sub()
tempstr = "hello python,you,me,world"
import re
rex = r'(hello|Use)'
print(re.sub(rex,"HELLO",tempstr))
來源 :Python 技術「ID: pythonall」
Crossin的新書【 碼上行動:用ChatGPT學會Python編程 】已經上市了。 本書以ChatGPT為輔助,系統全面地講解了如何掌握Python編程,適合Python零基礎入門的讀者學習。
購買後可加入讀者交流群,Crossin為你開啟陪讀模式,解答你在閱讀本書時的一切疑問。
Crossin的其他書籍:
添加微信 crossin123 ,加入編程教室共同學習 ~
感謝 轉發 和 點贊 的各位~