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