百度Python面试题
目錄
1、Python是如何進行內(nèi)存管理的?
2、什么是lambda函數(shù)?它有什么好處?
3、Python里面如何實現(xiàn)tuple和list的轉(zhuǎn)換?
4、請寫出一段Python代碼實現(xiàn)刪除一個list里面的重復(fù)元素?
5、使用Python編程用sort進行排序,然后從最后一個元素開始判斷?
6、Python里面如何拷貝一個對象?(賦值,淺拷貝,深拷貝的區(qū)別)
7、介紹一下except的用法和作用?
8、Python中pass語句的作用是什么?
9、介紹一下Python中range()函數(shù)的用法?
10、如何用Python來進行查詢和替換一個文本字符串?
11、Python里面match和search的區(qū)別?
12、Python里面如何生成隨機數(shù)?
1、Python是如何進行內(nèi)存管理的?
從三個方面來說:
一、對象的引用計數(shù)機制
二、垃圾回收機制
三、內(nèi)存池機制
一、對象的引用計數(shù)機制
Python 內(nèi)部使用引用計數(shù),來保持追蹤內(nèi)存中的對象,所有對象都有引用計數(shù)。
引用計數(shù)增加的情況:
(1)一個對象分配一個新名稱
(2)將其放入一個容器中(如列表、元組或字典)
引用計數(shù)減少的情況:
(1)使用 del 語句對對象別名顯示的銷毀
(2)引用超出作用域或被重新賦值
sys.getrefcount() 函數(shù)可以獲得對象的當(dāng)前引用計數(shù),多數(shù)情況下,引用計數(shù)比你猜測得要大得多。對于不可變數(shù)據(jù)(如數(shù)字和字符串),解釋器會在程序的不同部分共享內(nèi)存,以便節(jié)約內(nèi)存。
二、垃圾回收
(1)當(dāng)一個對象的引用計數(shù)歸零時,它將被垃圾收集機制處理掉。
(2)當(dāng)兩個對象 a 和 b 相互引用時,del 語句可以減少a 和 b 的引用計數(shù),并銷毀用于引用底層對象的名稱。然而由于每個對象都包含一個對其他對象的應(yīng)用,因此引用計數(shù)不會歸零,對象也不會銷毀(從而導(dǎo)致內(nèi)存泄露)。為解決這一問題,解釋器會定期執(zhí)行一個循環(huán)檢測器,搜索不可訪問對象的循環(huán)并刪除它們。
三、內(nèi)存池機制
Python 提供了對內(nèi)存的垃圾收集機制,但是它將不用的內(nèi)存放到內(nèi)存池而不是返回給操作系統(tǒng)。
(1)Pymalloc 機制。為了加速 Python 的執(zhí)行效率,Python 引入了一個內(nèi)存池機制,用于管理對小塊內(nèi)存的申請和釋放。
(2)Python 中所有小于256個字節(jié)的對象都使用 pymalloc 實現(xiàn)的分配器,而大的對象則使用系統(tǒng)的 malloc。
(3)對于 Python 對象,如整數(shù)和 List 都有其獨立的私有內(nèi)存池,對象間不共享他們的內(nèi)存池。也就是說如果你分配又釋放了大量的整數(shù),用于緩存這些整數(shù)的內(nèi)存就不能再分配給浮點數(shù)。
2、什么是lambda函數(shù)?它有什么好處?
lambda 表達式,通常是在需要一個函數(shù),但是又不想費神去命名一個函數(shù)的場合下使用,也就是指匿名函數(shù)。
lambda 函數(shù):首要用途是指點短小的回調(diào)函數(shù)
lambda[arguments]:expression示例代碼:
#!/usr/bin/env python # -*- coding: utf-8 -*- # 公眾號:AllTests軟件測試 add=lambda?x,y:x+y print(add(2,3))運行結(jié)果:輸出5
3、Python里面如何實現(xiàn)tuple和list的轉(zhuǎn)換?
直接使用 tuple 和 list 函數(shù)就行了,type()可以判斷對象的類型。
4、請寫出一段Python代碼實現(xiàn)刪除一個list里面的重復(fù)元素?
方法一:利用set集合實現(xiàn)
#!/usr/bin/env python # -*- coding: utf-8 -*- # 公眾號:AllTests軟件測試 info = [1,?2,?4,?1,?5,?6,?5,?0,?9,?0,?7,?7] result = list(set(info)) print(result) result.sort(key=info.index) print(result)運行結(jié)果:
方法二:使用字典函數(shù)
#!/usr/bin/env python # -*- coding: utf-8 -*- # 公眾號:AllTests軟件測試 info = [1,?2,?4,?1,?5,?6,?5,?0,?9,?0,?7,?7] result = {} result = result.fromkeys(info) print(result) result_list = list(result.keys()) print(result_list)運行結(jié)果:
方法三:列表推導(dǎo)式
#!/usr/bin/env python # -*- coding: utf-8 -*- # 公眾號:AllTests軟件測試 info = [1,?2,?4,?1,?5,?6,?5,?0,?9,?0,?7,?7] lst = [] res = [lst.append(i)?for?i?in?info?if?i?not?in?lst] print(lst)運行結(jié)果:
5、使用Python編程用sort進行排序,然后從最后一個元素開始判斷?
示例代碼:
#!/usr/bin/env python # -*- coding: utf-8 -*- # 公眾號:AllTests軟件測試 a=[1,-1,2,4,2,4,5,6,8,7,10,0,5,5,7,6,8,9,0,3] a.sort() last=a[-1] for?i?in?range(len(a)-2,-1,-1):if?last==a[i]:del?a[i]else:last=a[i] print(a)運行結(jié)果:
?
6、Python里面如何拷貝一個對象?(賦值,淺拷貝,深拷貝的區(qū)別)
賦值(=):就是創(chuàng)建了對象的一個新的引用,修改其中任意一個變量都會影響到另一個。
淺拷貝:創(chuàng)建一個新的對象,但它包含的是對原始對象中包含項的引用,如果用引用的方式修改其中一個對象,另外一個也會修改改變。
(完全切片方法;工廠函數(shù),如 list();copy 模塊的 copy() 函數(shù))
深拷貝:創(chuàng)建一個新的對象,并且遞歸的復(fù)制它所包含的對象,修改其中一個,另外一個不會改變。
(copy 模塊的 deep.deepcopy() 函數(shù))
7、介紹一下except的用法和作用?
try..-except…except…[else…][finally]執(zhí)行 try 下的語句,如果引發(fā)異常,則執(zhí)行過程會跳到 except 語句。對每個 except 分支順序嘗試執(zhí)行,如果引發(fā)的異常與 except 中的異常組匹配,執(zhí)行相應(yīng)的語句。如果所有的 except 都不匹配,則異常會傳遞到下一個調(diào)用本代碼的最高層 try 代碼中。try 下的語句正常執(zhí)行,則執(zhí)行else 塊代碼。如果發(fā)生異常,就不會執(zhí)行。如果存在 finally 語句,最后總是會執(zhí)行。
8、Python中pass語句的作用是什么?
pass 語句不會執(zhí)行任何操作,一般作為占位符或者創(chuàng)建占位程序。
9、介紹一下Python中range()函數(shù)的用法?
range() 函數(shù)可創(chuàng)建一個整數(shù)列表,一般用在 for 循環(huán)中。
range(start, stop[, step])參數(shù)說明:
start: 計數(shù)從 start 開始,默認是從0開始。例如 range(5) 等價于range(0,5) stop: 計數(shù)到 stop 結(jié)束,但不包括 stop。例如 range(0,5) 是 [0,?1,?2,?3,?4] 沒有5 step:步長,默認為1。例如 range(0,5) 等價于 range(0,5,1)10、如何用Python來進行查詢和替換一個文本字符串?
可以使用 re 模塊中的 sub() 函數(shù)或者 subn() 函數(shù)來進行查詢和替換。
格式:
sub(replacement, string[,count=0])replacement 是被替換成的文本,string 是需要被替換的文本,count 是一個可選參數(shù),指最大被替換的數(shù)量。
示例代碼:
#!/usr/bin/env python # -*- coding: utf-8 -*- # 公眾號:AllTests軟件測試 import?re p=re.compile('藍色|白色|紅色') print(p.sub('彩色','藍色襪子和紅色鞋子')) print(p.sub('彩色','藍色襪子和紅色鞋子',count=1))運行結(jié)果:
?
subn() 方法執(zhí)行的效果跟sub() 一樣,不過它會返回一個二維數(shù)組,包括替換后的新的字符串和總共替換的數(shù)量。
11、Python里面match和search的區(qū)別?
match() 和 search() 兩者都是測試正則表達式與字符串是否匹配。不同的是,match() 如果在字符串的開頭有0個或更多個字符,符合正則表達式模式,返回相關(guān)匹配的實例對象,如果字符串不符合正則表達式模式則返回None;而search()則不同,掃描整個字符串,如果產(chǎn)生了一個匹配正則模式就尋找到這個位置,返回相關(guān)匹配的對象。如果沒有位置能夠匹配這個模式則返回 None。
12、Python里面如何生成隨機數(shù)?
在 Python 中用于生成隨機數(shù)的模塊是 random,在使用前需要 import 導(dǎo)入。
random.random():生成一個?0-1?之間的隨機浮點數(shù) random.uniform(a,b):生成[a,b]之間的浮點數(shù) random.randint(a,b):生成[a,b]之間的整數(shù) random.randrange(a,b,step):在指定的集合[a,b)中,以 step 為基數(shù)隨機取一個數(shù) random.choice(sequence):從特定序列中隨機取一個元素,這里的序列可以是字符串,列表,元組等精彩推薦
面試筆試系列
思維導(dǎo)圖系列
Linux常用命令壁紙
接口Requests系列
測試框架pytest系列
Jmeter快速上手之接口測試
自動化測試框架結(jié)構(gòu)圖
移動安全框架(MobSF)
總結(jié)
以上是生活随笔為你收集整理的百度Python面试题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 京东联盟高级API - 高并发京东联盟转
- 下一篇: 斐讯K1、K2、K2P 刷机、刷入Bre