希望此文可以長(zhǎng)期更新并作為一篇Python的面試寶典,。每一道題目都附有詳細(xì)解答,以及更加詳細(xì)的回答鏈接,。此篇是概念篇,,下一篇會(huì)更新面試題代碼篇。 (一),、這兩個(gè)參數(shù)是什么意思:*args,,**kwargs?我們?yōu)槭裁匆褂盟鼈儯?/span> 答:如果我們不確定往一個(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)行重用。 有關(guān)于具體的裝飾器的用法看這里:裝飾器 - 廖雪峰的官方網(wǎng)站 (三),、簡(jiǎn)要描述Python的垃圾回收機(jī)制(garbage collection) Python中的垃圾回收是以引用計(jì)數(shù)為主,,標(biāo)記-清除和分代收集為輔。
如果你想要深入了解Python的GC機(jī)制,點(diǎn)擊這里:[轉(zhuǎn)載]Python垃圾回收機(jī)制--完美講解! (四),、Python多線程(multi-threading),。這是個(gè)好主意嗎,? Python并不支持真正意義上的多線程,Python提供了多線程包,。Python中有一個(gè)叫Global Interpreter Lock(GIL)的東西,,它能確保你的代碼中永遠(yuǎn)只有一個(gè)線程在執(zhí)行。經(jīng)過(guò)GIL的處理,,會(huì)增加執(zhí)行的開(kāi)銷,。這就意味著如果你先要提高代碼執(zhí)行效率,使用threading不是一個(gè)明智的選擇,,當(dāng)然如果你的代碼是IO密集型,,多線程可以明顯提高效率,相反如果你的代碼是CPU密集型的這種情況下多線程大部分是雞肋,。 想要深入詳細(xì)了解多線程,,點(diǎn)擊這里:詳解Python中的多線程編程_python 想了解一下IO密集和CPU密集可以點(diǎn)擊這里:CPU-bound(計(jì)算密集型) 和I/O bound(I/O密集型) (五)、 說(shuō)明os,sys模塊不同,,并列舉常用的模塊方法,? 官方文檔:
另一種回答: os模塊負(fù)責(zé)程序與操作系統(tǒng)的交互,提供了訪問(wèn)操作系統(tǒng)底層的接口,。sys模塊負(fù)責(zé)程序與Python解釋器的交互,,提供了一系列的函數(shù)和變量用戶操作Python運(yùn)行時(shí)的環(huán)境。 一些常用的方法:一些常用的用法示例: 想要了解更詳細(xì)的使用請(qǐng)?jiān)L問(wèn):os和sys模塊 - 君醉 (六),、什么是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ǔ)句,。 想更加詳細(xì)的了解Python中的Lamdba表達(dá)式可以點(diǎn)擊這里:Lambda 表達(dá)式有何用處?如何使用,? - Python (七),、Python中pass語(yǔ)句的作用是什么? pass語(yǔ)句不會(huì)執(zhí)行任何操作,,一般作為占位符或者創(chuàng)建占位程序 (八),、Python是如何進(jìn)行類型轉(zhuǎn)換的? Python提供了將變量或值從一種類型轉(zhuǎn)換為另一種類型的內(nèi)置方法。 (九),、Python里面如何拷貝一個(gè)對(duì)象,? Python中對(duì)象之間的賦值是按引用傳遞的,如果要拷貝對(duì)象需要使用標(biāo)準(zhǔn)模板中的copy
(十)、__new__和__init__的區(qū)別,。
總結(jié):__new__方法在__init__方法之前被調(diào)用,并且__new__方法的返回值將傳遞給__init__方法作為第一個(gè)參數(shù),,最后__init__給這個(gè)實(shí)例設(shè)置一些參數(shù),。 想要更加詳細(xì)的了解這兩個(gè)方法,請(qǐng)點(diǎn)擊:Python中的__new__及其用法 (十一),、Python中單下劃線和雙下劃線分別是什么,?
想要更加詳細(xì)的了解這兩者的區(qū)別,,請(qǐng)點(diǎn)擊:Python中的下劃線(譯文) (十二),、說(shuō)一說(shuō)Python自省。 自省就是面向?qū)ο蟮恼Z(yǔ)言所寫(xiě)的程序在運(yùn)行時(shí),,所能知道對(duì)象的類型,。簡(jiǎn)單一句話就是運(yùn)行時(shí)能夠獲得對(duì)象的類型。比如:type(),、dir(),、getattr()、hasattr(),、isinstance() 想要完整的理解Python自省,,請(qǐng)點(diǎn)擊:Python自省(反射)指南 有關(guān)于元類以及單例模式會(huì)在后面文章中做詳細(xì)的解釋說(shuō)明。 |
|
來(lái)自: 自然科學(xué)思維 > 《Python》