python面試真題整理
Day1
python中is和==的區別
在python中,一個對象有三個要素,value,id和type。
“==”主要判斷的是兩個對象的value是否相同,
“is”也叫同一性運算符,會判斷兩者的ID是否相同。
簡述read、readline和readlines的區別
read:將文件內內容全部讀取輸出;
readline:讀取文件內容的一行;
readlines:讀取文件的所有內容,按行返回一個列表。
舉例說明創建字典的至少兩種方法
- 直接採用dict={key:value}創建
- 內建方法fromkeys。dict = {}.fromkeys((key1,key2),value),這樣創建出來的字典適合字典中的key有相同的value值,默認爲None。
- zip間接創建userinfo = zip.([“username”,“Id”],[“lalala”,“123”]),dict(userinfo),即可創建字典。
*args,**kwargs的作用?如何使用?
當函數的參數不確定時,可以使用args 和kwargs,args 沒有key值,kwargs有key值。
當我們不知道向函數傳遞多少參數時,比如我們向傳遞一個列表或元組,我們就使用*args
當我們不知道該傳遞多少關鍵字參數時,使用**kwargs來收集關鍵字參數
python中match()和search()的區別?
match()函數只檢測字符串開頭位置與所檢測的string是否匹配,匹配成功纔會返回結果,否則返回None;
search()函數會在整個字符串內查找模式匹配,只到找到第一個匹配然後返回一個包含匹配信息的對象,該對象可以通過調用group()方法得到匹配的字符串,如果字符串沒有匹配,則返回None。
Day2
解釋一下python中的三元表達式
if_suite if expression1 else else_suite
expression1 :判斷條件
if_suite:True的值
else_suite:False的值
Python中如何實現多線程?
創建Thread的實例,傳遞給它一個函數
創建Thread的實例,傳遞給它一個可調用的類實例
派生Thread的子類,並創建子類的實例
使用線程池
解釋繼承
繼承描述的是事物之間的所屬關係,當我們定義一個class的時候,可以從某個現有的class繼承,父類的屬性、方法,會被繼承給子類。
什麼是Flask?
Flask 是 Python 編寫的一款輕量級 Web 應用框架。其 WSGI 工具箱採用 Werkzeug ,模板引擎則使用 Jinja2。Flask 使用 BSD 授權。其中兩個環境依賴是 Werkzeug 和 jinja2,這意味着它不需要依賴外部庫。正因如此,我們將其稱爲輕量級框架。
如何在Python中管理內存?
Python採用的是引用計數機制來管理分配的內存。Python 的每個對象都有一個引用計數,這個引用計數表明了有多少對象在指向它。當這個引用計數爲 0 時,釋放該對象的內存。爲了解決循環引用的問題,Python提供了“標記-清除”法,用於釋放循環引用的對象。
Day3
python2和python3的range(100)的區別。
在python2中,range(100)返回的是一個列表,
在python3中,range(100)返回的是一個可迭代對象。
一句話解釋什麼樣的語言能夠用裝飾器。
函數可以作爲參數傳遞的語言可以使用裝飾器
python內建數據類型有哪些?
python內建數據類型有整形(int)、浮點型(float)、複數(complex)、布爾(bool)、字符串(str)、列表(list)、元組(tuple)、集合(set)、字典(dict)、
簡述面向對象中__new__和__init__的區別?
__new__是在創建對象之前進行的動作,所接受的參數是cls,負責對象的創建;
__init__是在對象創建之後的動作,完善對象的屬性,所接受的參數是self。
對象的生成是在new中完成的。
簡述with方法打開處理文件幫我們做了什麼?
with方法打開文件,可以在我們對文件操作完成後,自動關閉文件,保證文件的安全性。
Day4
大數據的文件讀取
① 利用生成器generator;
②迭代器進行迭代遍歷:for line in file
迭代器和生成器的區別
可迭代對象:可以直接作用於for循環的對象;
迭代器就是用於迭代操作的對象,迭代器都是可迭代對象。簡單來說,迭代器就是可以被next()函數調用並不斷返回下一個值的對象;
生成器的本質也是一個迭代器,與迭代器的區別在與yield,生成器在返回數據是需要使用yield。
裝飾器的作用和功能
裝飾器的本質就是一個函數,只不過裝飾器的參數不像普通函數那樣,裝飾器的參數是一個函數,它的作用就是它可以讓其他函數在不需要修改代碼的前提下增加額外的功能,裝飾器的返回值也是一個函數對象。在開發中,我們需要遵循開放封閉原則,對於已經實現的功能,我們便不再對其進行修改,這時就需要裝飾器來對其進行擴展。
簡單談下GIL
GIL(Global Interperter Lock)即全局解釋器鎖,GIL是Python解釋層面的鎖,解決解釋器中多個線程的競爭資源問題(多個子線程在系統資源競爭時,都在等待對象某個部分資源解除佔用狀態,結果誰也不願意先解鎖,然後互相等着,程序無法執行下去)。
如何提高python的運行效率
- 優化循環
- 多使用pthon中已經封裝好的模塊
- 使用較新的Python版本
Day5
列表和元組有什麼不同?
首先,列表和元組都是可以存儲任意數據類型的集合,
但元組是不可變的。
解釋Python中的help()函數和dir()函數。
help函數是一個內置函數,用於查看函數或模塊用途的詳細說明。
dir()函數時python的內置函數,dir()函數不帶參數時,返回當前範圍內的變量、方法和定義的類型列表,帶參數時,返回參數的屬性、方法列表
當退出Python時是否會釋放所有內存分配?
答案是否定的。那些具有對象循環引用或者全局命名空間引用的變量,在 Python 退出是往往不會被釋放。
什麼是猴子補丁?
屬性在運行時的動態替換,叫做猴子補丁。
解釋一下*args和**kwargs。
見Day1*args,**kwargs的作用?如何使用?