吐血整理的 Python 面試題,請務(wù)必收藏!

文 |?潮汐
來源:Python 技術(shù)「ID: pythonall」

年關(guān)將至,給年后準(zhǔn)備跳槽的準(zhǔn)備一份面試指南,希望大家在漲薪和成長的路上多一點(diǎn)指引!
python2和python3區(qū)別?
Python3 使用 print 必須要以小括號(hào)包裹打印內(nèi)容,比如 print('hi')
Python2 既可以使用帶小括號(hào)的方式,也可以使用一個(gè)空格來分隔打印內(nèi)容,比如 print 'hi'
Python2 range(1,10)返回列表,python3中返回迭代器,節(jié)約內(nèi)存
Python2 中使用 ascii 編碼,python中使用 utf-8 編碼
Python2 中 unicode 表示字符串序列,str 表示字節(jié)序列
Python3 中 str 表示字符串序列,byte 表示字節(jié)序列
Python2 中為正常顯示中文,引入 coding 聲明,python3 中不需要
Python2 中是 raw_input() 函數(shù),python3 中是input()函數(shù)
Python代碼中_args, *_kwargs 含義及用法?
args:?arguments 的縮寫,表示位置參數(shù)
kwargs:?keyword arguments 的縮寫,表示關(guān)鍵字參數(shù)
請列出 5 個(gè) python 標(biāo)準(zhǔn)庫?
os:提供了不少與操作系統(tǒng)相關(guān)聯(lián)的函數(shù) sys: 通常用于命令行參數(shù) re: 正則匹配 math: 數(shù)學(xué)運(yùn)算 datetime:處理日期時(shí)間
Python的可變數(shù)據(jù)類型和不可變數(shù)據(jù)類型分別有?
可變數(shù)據(jù)類型:列表、字典、集合
不可變數(shù)據(jù)類型:數(shù)字、字符串、元組
Python 中魔法方法和其用途?
__init__:對象初始化方法
__new__:創(chuàng)建對象時(shí)候執(zhí)行的方法,單列模式會(huì)用到
__str__:當(dāng)使用print輸出對象的時(shí)候,只要自己定義了__str__(self)方法,那么就會(huì)打印從在這個(gè)方法中return的數(shù)據(jù)
__del__:刪除對象執(zhí)行的方法
Python ?中os和sys模塊的作用分別是?
os模塊:負(fù)責(zé)程序與操作系統(tǒng)的交互,提供了訪問操作系統(tǒng)底層的接口。sys模塊:負(fù)責(zé)程序與python解釋器的交互,提供了一系列的函數(shù)和變量,用于操控python的運(yùn)行時(shí)環(huán)境。
簡述Python引用計(jì)數(shù)機(jī)制?
python垃圾回收主要以引用計(jì)數(shù)為主,標(biāo)記-清除和分代清除為輔的機(jī)制,其中標(biāo)記-清除和分代回收主要是為了處理循環(huán)引用的難題。
Python賦值、淺拷貝和深拷貝的區(qū)別?
Python 有 3 種賦值方式:直接賦值、淺拷貝、深拷貝;
直接賦值:就是對象的引用。(相當(dāng)于給原來的對象起個(gè)別名),比如有個(gè)人叫張三,外號(hào)叫小張,對象的引用就是類似,雖然換個(gè)名字,但是兩個(gè)名字指的是同一個(gè)人。
淺拷貝,拷貝的是父對象,不會(huì)拷貝到內(nèi)部的子對象。(單從淺字就可以看出拷貝的東西不深,可以理解為只拷貝一層) { 1、完全切片方法;2、工廠函數(shù),如 list();3、copy 模塊的 copy()函數(shù) }
深拷貝,包含對象里面的自對象的拷貝(可以理解為克隆,全拷貝過去但是兩者沒有任何關(guān)系了,各自是各自的);所以原始對象的改變不會(huì)造成深拷貝里任何子元素的改變 { copy 模塊的?deep.deepcopy()函數(shù) }
請闡述在Python中split(),sub(),subn()的功能分別是什么?
split():?使用正則表達(dá)式模式將給定字符串“拆分”到列表中。
sub():?查找正則表達(dá)式模式匹配的所有子字符串,然后用不同的字符串替換它們
subn():?它類似于sub(),并且還返回新字符串。
舉例 sort 和 sorted方法的區(qū)別?
使用 sort()方法對 list 排序會(huì)修改 list 本身,不會(huì)返回新 list,sort()不能對 dict 字典進(jìn)行排序;
sorted 方法對可迭代的序列排序生成新的序列,對 dict 排序默認(rèn)會(huì)按照 dict 的 key 值進(jìn)行排序,最后返回的結(jié)果是一個(gè)對 key 值排序好的list;
sorted 對 tuple, dict 依然有效,而 sort 不行;
解釋 Python 中的可變類型和不可變類型?
1.Python中的可變類型有l(wèi)ist,dict;不可變類型有string,number,tuple.
2.當(dāng)進(jìn)行修改操作時(shí),可變類型傳遞的是內(nèi)存中的地址,也就是說,直接修改內(nèi)存中的值,并沒有開辟新的內(nèi)存。
3.不可變類型被改變時(shí),并沒有改變原內(nèi)存地址中的值,而是開辟一塊新的內(nèi)存,將原地址中的值復(fù)制過去,對這塊新開辟的內(nèi)存中的值進(jìn)行操作。
Python 中類方法、類實(shí)例方法、靜態(tài)方法有何區(qū)別?
類方法:?是類對象的方法,在定義時(shí)需要在上方使用?@classmethod?進(jìn)行裝飾,形參為cls,表示類對象,類對象和實(shí)例對象都可調(diào)用
類實(shí)例方法:?是類實(shí)例化對象的方法,只能由實(shí)例對象調(diào)用,形參為self,指代對象本身;
靜態(tài)方法:?是一個(gè)任意函數(shù),在其上方使用?@staticmethod?進(jìn)行裝飾,實(shí)例對象和類對象都可以調(diào)用。但是方法體中不能使用類或?qū)嵗娜魏螌傩院头椒ā?/p>
Python 中編寫函數(shù)的原則?
Python 中編寫函數(shù)的原則有4個(gè),分別有:
函數(shù)設(shè)計(jì)要盡量短小,嵌套層次不宜過深。避免過長函數(shù),嵌套最好能控制在3層之內(nèi)
函數(shù)申明應(yīng)該合理,簡單,易于使用。除函數(shù)名能夠夠正確反映其大體功能外,參數(shù)的設(shè)計(jì)也應(yīng)該簡潔明了,參數(shù)個(gè)數(shù)不宜太多
函數(shù)參數(shù)設(shè)計(jì)應(yīng)該考慮向下兼容。可以通過加入默認(rèn)參數(shù)來避免退化
一個(gè)函數(shù)只做一件事,就要盡量保證抽象層級(jí)的一致性,所有語句盡量在一個(gè)粒度上。若在一個(gè)函數(shù)中處理多件事,不利于代碼的重用;
請闡述同步,異步,阻塞,非阻塞的概念?
同步:?多個(gè)任務(wù)之間有先后順序執(zhí)行,一個(gè)執(zhí)行完下個(gè)才能執(zhí)行。
異步:?多個(gè)任務(wù)之間沒有先后順序,可以同時(shí)執(zhí)行,有時(shí)候一個(gè)任務(wù)可能要在必要的時(shí)候獲取另一個(gè)同時(shí)執(zhí)行的任務(wù)的結(jié)果,這個(gè)就叫回調(diào)!
阻塞:?如果卡住了調(diào)用者,調(diào)用者不能繼續(xù)往下執(zhí)行,就是說調(diào)用者阻塞了。
非阻塞:?如果不會(huì)卡住,可以繼續(xù)執(zhí)行,就是說非阻塞的。
同步異步相對于多任務(wù)而言,阻塞非阻塞相對于代碼執(zhí)行而言。
合并兩個(gè)列表并去除重復(fù)元素?
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)
如何查詢和替換一個(gè)文本中的字符串?
tempstr?=?"hello?python,you,me,world"
print(tempstr.replace("hello","python"))
#還可以使用正則,有個(gè)sub()
tempstr?=?"hello?python,you,me,world"
import?re
rex?=?r'(hello|Use)'
print(re.sub(rex,"HELLO",tempstr))
總結(jié)
關(guān)于 Python 的面試問題還有很多很多,今天小編暫且總結(jié)到這里,希望對大家有所幫助。
參考
https://github.com/DasyDong/interview/blob/master/notes/python_interview.md
PS:公號(hào)內(nèi)回復(fù)「Python」即可進(jìn)入Python 新手學(xué)習(xí)交流群,一起 100 天計(jì)劃!
老規(guī)矩,兄弟們還記得么,右下角的 “在看” 點(diǎn)一下,如果感覺文章內(nèi)容不錯(cuò)的話,記得分享朋友圈讓更多的人知道!


【代碼獲取方式】
