用python编制一个的类_常见面试题整理--Python概念篇
前言
眾所周知,每年的三月份和四月份都是招聘、找工作的高峰期,所以被人們成為金三銀四,所以小編特地整理了一些關(guān)于Python的面試題,希望對(duì)你們有所幫助!
(一)、這兩個(gè)參數(shù)是什么意思:*args,**kwargs?我們?yōu)槭裁匆褂盟鼈?#xff1f;
如果我們不確定往一個(gè)函數(shù)中傳入多少參數(shù),或者我們希望以元組(tuple)或者列表(list)的形式傳參數(shù)的時(shí)候,我們可以使用*args(單星號(hào))。如果我們不知道往函數(shù)中傳遞多少個(gè)關(guān)鍵詞參數(shù)或者想傳入字典的值作為關(guān)鍵詞參數(shù)的時(shí)候我們可以使用**kwargs(雙星號(hào)),args、kwargs兩個(gè)標(biāo)識(shí)符是約定俗成的用法。
另一種答法:當(dāng)函數(shù)的參數(shù)前面有一個(gè)星號(hào)*號(hào)的時(shí)候表示這是一個(gè)可變的位置參數(shù),兩個(gè)星號(hào)**表示這個(gè)是一個(gè)可變的關(guān)鍵詞參數(shù)。星號(hào)*把序列或者集合解包(unpack)成位置參數(shù),兩個(gè)星號(hào)**把字典解包成關(guān)鍵詞參數(shù)。
(二)、談一談Python的裝飾器(decorator)
裝飾器本質(zhì)上是一個(gè)Python函數(shù),它可以讓其它函數(shù)在不作任何變動(dòng)的情況下增加額外功能,裝飾器的返回值也是一個(gè)函數(shù)對(duì)象。它經(jīng)常用于有切面需求的場(chǎng)景。比如:插入日志、性能測(cè)試、事務(wù)處理、緩存、權(quán)限校驗(yàn)等。有了裝飾器我們就可以抽離出大量的與函數(shù)功能無(wú)關(guān)的雷同代碼進(jìn)行重用。
(三)、簡(jiǎn)要描述Python的垃圾回收機(jī)制(garbage collection)
Python中的垃圾回收是以引用計(jì)數(shù)為主,標(biāo)記-清除和分代收集為輔。
引用計(jì)數(shù):Python在內(nèi)存中存儲(chǔ)每個(gè)對(duì)象的引用計(jì)數(shù),如果計(jì)數(shù)變成0,該對(duì)象就會(huì)消失,分配給該對(duì)象的內(nèi)存就會(huì)釋放出來(lái)。
標(biāo)記-清除:一些容器對(duì)象,比如list、dict、tuple,instance等可能會(huì)出現(xiàn)引用循環(huán),對(duì)于這些循環(huán),垃圾回收器會(huì)定時(shí)回收這些循環(huán)(對(duì)象之間通過(guò)引用(指針)連在一起,構(gòu)成一個(gè)有向圖,對(duì)象構(gòu)成這個(gè)有向圖的節(jié)點(diǎn),而引用關(guān)系構(gòu)成這個(gè)有向圖的邊)。
分代收集:Python把內(nèi)存根據(jù)對(duì)象存活時(shí)間劃分為三代,對(duì)象創(chuàng)建之后,垃圾回收器會(huì)分配它們所屬的代。每個(gè)對(duì)象都會(huì)被分配一個(gè)代,而被分配更年輕的代是被優(yōu)先處理的,因此越晚創(chuàng)建的對(duì)象越容易被回收。
(四)、Python多線程(multi-threading)。這是個(gè)好主意嗎?
Python并不支持真正意義上的多線程,Python提供了多線程包。Python中有一個(gè)叫Global Interpreter Lock(GIL)的東西,它能確保你的代碼中永遠(yuǎn)只有一個(gè)線程在執(zhí)行。經(jīng)過(guò)GIL的處理,會(huì)增加執(zhí)行的開(kāi)銷(xiāo)。這就意味著如果你先要提高代碼執(zhí)行效率,使用threading不是一個(gè)明智的選擇,當(dāng)然如果你的代碼是IO密集型,多線程可以明顯提高效率,相反如果你的代碼是CPU密集型的這種情況下多線程大部分是雞肋。
(五)、 說(shuō)明os,sys模塊不同,并列舉常用的模塊方法?
官方文檔:
os模板提供了一種方便的使用操作系統(tǒng)函數(shù)的方法
sys模板可供訪問(wèn)由解釋器使用或維護(hù)的變量和與解釋器交互的函數(shù)
另一種回答:
os模塊負(fù)責(zé)程序與操作系統(tǒng)的交互,提供了訪問(wèn)操作系統(tǒng)底層的接口。sys模塊負(fù)責(zé)程序與Python解釋器的交互,提供了一系列的函數(shù)和變量用戶(hù)操作Python運(yùn)行時(shí)的環(huán)境。
一些常用的方法:
一些常用的用法示例:
(六)、什么是lambda表達(dá)式?它有什么好處?
簡(jiǎn)單來(lái)說(shuō),lambda表達(dá)式通常是當(dāng)你需要使用一個(gè)函數(shù),但是又不想費(fèi)腦袋去命名一個(gè)函數(shù)的時(shí)候使用,也就是通常所說(shuō)的匿名函數(shù)。
lambda表達(dá)式一般的形式是:關(guān)鍵詞lambda后面緊接一個(gè)或多個(gè)參數(shù),緊接一個(gè)冒號(hào)“:”,緊接一個(gè)表達(dá)式。lambda表達(dá)式是一個(gè)表達(dá)式不是一個(gè)語(yǔ)句。
(七)、Python中pass語(yǔ)句的作用是什么?
pass語(yǔ)句不會(huì)執(zhí)行任何操作,一般作為占位符或者創(chuàng)建占位程序
(八)、Python是如何進(jìn)行類(lèi)型轉(zhuǎn)換的?
Python提供了將變量或值從一種類(lèi)型轉(zhuǎn)換為另一種類(lèi)型的內(nèi)置方法。
(九)、Python里面如何拷貝一個(gè)對(duì)象?
Python中對(duì)象之間的賦值是按引用傳遞的,如果要拷貝對(duì)象需要使用標(biāo)準(zhǔn)模板中的copy
copy.copy:淺拷貝,只拷貝父對(duì)象,不拷貝父對(duì)象的子對(duì)象。
copy.deepcopy:深拷貝,拷貝父對(duì)象和子對(duì)象。
(十)、__new__和__init__的區(qū)別。
__init__為初始化方法,__new__方法是真正的構(gòu)造函數(shù)。
__new__是實(shí)例創(chuàng)建之前被調(diào)用,它的任務(wù)是創(chuàng)建并返回該實(shí)例,是靜態(tài)方法
__init__是實(shí)例創(chuàng)建之后被調(diào)用的,然后設(shè)置對(duì)象屬性的一些初始值。
總結(jié):__new__方法在__init__方法之前被調(diào)用,并且__new__方法的返回值將傳遞給__init__方法作為第一個(gè)參數(shù),最后__init__給這個(gè)實(shí)例設(shè)置一些參數(shù)。
(十一)、Python中單下劃線和雙下劃線分別是什么?
__name__:一種約定,Python內(nèi)部的名字,用來(lái)與用戶(hù)自定義的名字區(qū)分開(kāi),防止沖突
_name:一種約定,用來(lái)指定變量私有
__name:解釋器用_classname__name來(lái)代替這個(gè)名字用以區(qū)別和其他類(lèi)相同的命名
(十二)、說(shuō)一說(shuō)Python自省。
自省就是面向?qū)ο蟮恼Z(yǔ)言所寫(xiě)的程序在運(yùn)行時(shí),所能知道對(duì)象的類(lèi)型。簡(jiǎn)單一句話就是運(yùn)行時(shí)能夠獲得對(duì)象的類(lèi)型。比如:type()、dir()、getattr()、hasattr()、isinstance()
總結(jié)
以上是生活随笔為你收集整理的用python编制一个的类_常见面试题整理--Python概念篇的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: skywalking后端处理业务逻辑的梳
- 下一篇: python wpf教程_WPF使用Ir