溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

15道經(jīng)典python基礎(chǔ)面試題以及解題答案

發(fā)布時(shí)間:2020-11-24 12:08:54 來(lái)源:億速云 閱讀:546 作者:小新 欄目:編程語(yǔ)言

小編給大家分享一下15道經(jīng)典python基礎(chǔ)面試題以及解題答案,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

1、 閉包

定義:閉包是由函數(shù)及其相關(guān)的引用環(huán)境組合而成的實(shí)體(即:閉包=函數(shù)+引用環(huán)境)(想想Erlang的外層函數(shù)傳入一個(gè)參數(shù)a, 內(nèi)層函數(shù)依舊傳入一個(gè)參數(shù)b, 內(nèi)層函數(shù)使用a和b, 最后返回內(nèi)層函數(shù))

代碼

def ExFunc(n):
	sum=n
def InsFunc():
	return sum+1
	return InsFunc

2、裝飾器

def debug(func):
     def wrapper():
         print "[DEBUG]: enter {}()".format(func.name)
         return func()
     return wrapper
@debug
def say_hello():
print "hello!"

3、迭代器

1、可以直接作用于for循環(huán)的數(shù)據(jù)類型

第一類:集合數(shù)據(jù)類型,如list、tuple、dict、set、str等;

第二類:generator,包括集合定義generator和帶yield的generator(也就是generator function)。

以上這些可以直接作用于for循環(huán)的對(duì)象統(tǒng)稱為可迭代對(duì)象:Iterable。

可以使用isinstance()判斷一個(gè)對(duì)象是否是Iterable對(duì)象:

generator不但可以作用于for循環(huán),還可以被next()函數(shù)不斷調(diào)用并返回下一個(gè)值,直到最后拋出StopIteration錯(cuò)誤表示無(wú)法繼續(xù)返回下一個(gè)值了。那么定義來(lái)了,可以被next()調(diào)用并不斷返回下一個(gè)值得對(duì)象稱為迭代器(Iterator)

把list、dict、str等Iterable變成Iterator可以使用iter()函數(shù)

4、生成器

為什么使用生成式:

更容易使用,代碼量較小內(nèi)存使用更加高效

5、描述器

描述器的表現(xiàn)

用到三個(gè)魔術(shù)方法。get()   set()  delete()

方法簽名如下:

object.get(self,instance,owner)

object.set(self,instance,value)

object.delete(self,instance)

Self指指代當(dāng)前實(shí)例,調(diào)用者。

Instance是owner的實(shí)例。

Owner是屬性所屬的類。

典型的描述器:@Property

作用:訪問(wèn)類和實(shí)例的屬性

6、內(nèi)置模塊

re(正則)、math(數(shù)學(xué))、os(系統(tǒng))、datetime、sys、json

sys:

sys.argv

功能:在外部向程序內(nèi)部傳遞參數(shù)

sys.exit(n)

功能:執(zhí)行到主程序末尾,解釋器自動(dòng)退出,但是如果需要中途退出程序,可以調(diào)用sys.exit函數(shù),帶有一個(gè)可選的整數(shù)參數(shù)返回給調(diào)用它的程序,表示你可以在主程序中捕獲對(duì)sys.exit的調(diào)用。(0是正常退出,其他為異常)

sys.path

功能:獲取指定模塊搜索路徑的字符串集合,可以將寫(xiě)好的模塊放在得到的某個(gè)路徑下,就可以在程序中import時(shí)正確找到。

sys.modules

功能:sys.modules是一個(gè)全局字典,該字典是python啟動(dòng)后就加載在內(nèi)存中。每當(dāng)程序員導(dǎo)入新的模塊,sys.modules將自動(dòng)記錄該模塊。當(dāng)?shù)诙卧賹?dǎo)入該模塊時(shí),python會(huì)直接到字典中查找,從而加快了程序運(yùn)行的速度。它擁有字典所擁有的一切方法。

7、列表的用法

函數(shù)用法:

cmp :比較兩個(gè)列表的元素

len :列表元素個(gè)數(shù)

max :返回列表元素最大值

min :返回列表元素最小值

list :將元組轉(zhuǎn)化為列表

方法:

List.append() 在列表末尾添加新對(duì)象
List.count() 統(tǒng)計(jì)某個(gè)元素在列表中出現(xiàn)的次數(shù)
List.extend() 在列表末尾一次性追加另一個(gè)序列中的多個(gè)值(用新列表擴(kuò)展原來(lái)的列表)
List.index() 從列表中找出某個(gè)值第一個(gè)匹配項(xiàng)的索引位置
List.insert() 將對(duì)象插入列表
List.pop() 移除列表中的一個(gè)元素(默認(rèn)最后一個(gè)元素),并且返回該元素的值
List.remove() 移除列表中某個(gè)值的第一個(gè)匹配項(xiàng)
List.reverse() 反向列表中元素
List.sort() 對(duì)原列表進(jìn)行排序 reverse=False(默認(rèn)升序)
join() 將列表轉(zhuǎn)化為字符串

8、字符串用法

內(nèi)建函數(shù):

Capitalize() 字符串第一個(gè)大寫(xiě)
Center() 返回一個(gè)原字符串居中,并使用空格填充至長(zhǎng)度 width 的新字符串
Count(str,beg=0,end=len(string)) 返回 str 在 string 里面出現(xiàn)的次數(shù),如果 beg 或者 end 指定則返回指定范圍內(nèi)str
出現(xiàn)的次數(shù)
decode(encoding=’utf-8’) 以 encoding 指定的編碼格式解碼 string,如果出錯(cuò)默認(rèn)報(bào)一個(gè) ValueError 的 異 常 , 除非 
errors 指 定 的 是 'ignore' 或 者'replace'
encode(encoding=’utf-8’) 以 encoding 指定的編碼格式編碼 string,如果出錯(cuò)默認(rèn)報(bào)一個(gè)ValueError 的異常,除非errors 
指定的是'ignore'或者'replace'
endswith(obj,beg=0,end=len(string)) 檢查字符串是否以 obj 結(jié)束,如果beg 或者 end 指定則檢查指定的范圍內(nèi)是否以 obj 結(jié)束,
如果是,返回 True,否則返回 False.
expandtabs(tabsize=8) 把字符串 string 中的 tab 符號(hào)轉(zhuǎn)為空格,tab 符號(hào)默認(rèn)的空格數(shù)是 8。
Format() 格式化字符串
Index() 跟find()方法一樣,只不過(guò)如果str不在 string中會(huì)報(bào)一個(gè)異常
Isalnum() 如果 string 至少有一個(gè)字符并且所有字符都是字母或數(shù)字則返回 True,否則返回 False
Isalpha() 如果 string 至少有一個(gè)字符并且所有字符都是字母則返回 True,否則返回 False
Isdigit() 如果 string 只包含數(shù)字則返回 True 否則返回 False.
Lstrip() 截掉 string 左邊的空格
Replace(str1,str2,num=string.count(str1) 把 string 中的 str1 替換成 str2,如果 num 指定,則替換不超過(guò) num 次
Rstrip() 刪除 string 字符串末尾的空格.
Split(str=’’,num=string.count(str)) 以 str 為分隔符切片 string,如果 num 有指定值,則僅分隔 num+ 個(gè)子字符串
Strip() 在 string 上執(zhí)行 lstrip()和 rstrip()

9、HTTP/HTTPS協(xié)議

HTTP:是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議,是一個(gè)客戶端和服務(wù)器端請(qǐng)求和應(yīng)答的標(biāo)準(zhǔn)(TCP),用于從WWW服務(wù)器傳輸超文本到本地瀏覽器的傳輸協(xié)議,它可以使瀏覽器更加高效,使網(wǎng)絡(luò)傳輸減少。

HTTPS:是以安全為目標(biāo)的HTTP通道,簡(jiǎn)單講是HTTP的安全版,即HTTP下加入SSL層,HTTPS的安全基礎(chǔ)是SSL,因此加密的詳細(xì)內(nèi)容就需要SSL。

HTTPS協(xié)議的主要作用可以分為兩種:一種是建立一個(gè)信息安全通道,來(lái)保證數(shù)據(jù)傳輸?shù)陌踩?;另一種就是確認(rèn)網(wǎng)站的真實(shí)性。

區(qū)別

1、https協(xié)議需要到ca申請(qǐng)證書(shū),一般免費(fèi)證書(shū)較少,因而需要一定費(fèi)用。

2、http是超文本傳輸協(xié)議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協(xié)議。

3、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。

4、http的連接很簡(jiǎn)單,是無(wú)狀態(tài)的;HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,比http協(xié)議安全。

10、高階函數(shù)

Map()、filter()、zip()、reduce()、sorted()、lambda函數(shù)

11、深/淺拷貝

淺拷貝:拷貝表面層,更深的層次引用原來(lái)地址的

深拷貝:拷貝所有,內(nèi)存中開(kāi)辟新地址

12、面向?qū)ο缶幊蹋∣OP)

類是描述具有相同屬性和方法的對(duì)象的集合,Python中定義類使用class關(guān)鍵字,類的實(shí)例叫做對(duì)象,類中定義的函數(shù)叫做方法。

13、元類

所有類的父類,定義的新類可以看成元類的實(shí)例

14、正則

功能函數(shù):

compile() 編譯正則表達(dá)式模式,返回一個(gè)對(duì)象的模式
match() 只匹配字符串的開(kāi)始,如果開(kāi)始不匹配,函數(shù)返回None
search() 在整個(gè)字符串中尋找,找到返回,匹配不成功返回None
findall() 遍歷匹配,可以獲取字符串中所有匹配的字符串,返回一個(gè)列表
finditer() 搜索string,返回一個(gè)順序訪問(wèn)每一個(gè)匹配結(jié)果(Match對(duì)象)的迭代器。找到 RE 匹配的所有子串,并把它們作為一個(gè)迭
代器返回
貪婪匹配和費(fèi)貪婪匹配
前面的*,+,?等都是貪婪匹配,也就是盡可能匹配,后面加?號(hào)使其變成惰性匹配
\d   數(shù)字:[0-9]
\D   非數(shù)字:[^\d]
\s   匹配任何空白字符:[<空格>\t\r\n\f\v]
\S   非空白字符:[^\s]
\w   匹配包括下劃線在內(nèi)的任何字字符:[A-Za-z0-9_]
\W   匹配非字母字符,即匹配特殊字符
\A   僅匹配字符串開(kāi)頭,同^
\Z   僅匹配字符串結(jié)尾,同$
\b   匹配\w和\W之間,即匹配單詞邊界匹配一個(gè)單詞邊界,也就是指單詞和空格間的位置。例如, 'er\b' 可以匹配"never" 中
的 'er',但不能匹配 "verb" 中的'er'。
\B   [^\b]
.    匹配任意除換行符"\n"外的字符(在DOTALL模式中也能匹配換行符
\    轉(zhuǎn)義字符,使后一個(gè)字符改變?cè)瓉?lái)的意思
l   匹配前一個(gè)字符0或多次
+   匹配前一個(gè)字符1次或無(wú)限次
?   匹配一個(gè)字符0次或1次

15、內(nèi)存管理

1、 Python引入了一個(gè)機(jī)制:引用計(jì)數(shù)

2、 垃圾回收機(jī)制:當(dāng)引用計(jì)數(shù)為0時(shí),調(diào)用del方法

注意:

1、垃圾回收時(shí),Python不能進(jìn)行其它的任務(wù),頻繁的垃圾回收將大大降低Python的工作效率;

2、Python只會(huì)在特定條件下,自動(dòng)啟動(dòng)垃圾回收(垃圾對(duì)象少就沒(méi)必要回收)

3、當(dāng)Python運(yùn)行時(shí),會(huì)記錄其中分配對(duì)象(object allocation)和取消分配對(duì)象(object deallocation)的次數(shù)。當(dāng)兩者的差值高于某個(gè)閾值時(shí),垃圾回收才會(huì)啟動(dòng)。

3、內(nèi)存池機(jī)制

Python中有分為大內(nèi)存和小內(nèi)存:(256K為界限分大小內(nèi)存)

1、大內(nèi)存使用malloc進(jìn)行分配

2、小內(nèi)存使用內(nèi)存池進(jìn)行分配

3、Python的內(nèi)存池(金字塔)

看完了這篇文章,相信你對(duì)15道經(jīng)典python基礎(chǔ)面試題以及解題答案有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI