吐血整理的 Python 面試題,請務(wù)必收藏!
↑?關(guān)注 + 星標?,每天學(xué)Python新技能
后臺回復(fù)【大禮包】送你Python自學(xué)大禮包
文 |?潮汐
來源:Python 技術(shù)「ID: pythonall」

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




