公眾號(hào)新增加了一個(gè)欄目,就是每天給大家解答一道Python常見的面試題,反正每天不貪多,一天一題,正好合適,只希望這個(gè)面試欄目,給那些正在準(zhǔn)備面試的同學(xué),提供一點(diǎn)點(diǎn)幫助! 小猿會(huì)從最基礎(chǔ)的面試題開始,每天一題。如果參考答案不夠好,或者有錯(cuò)誤的話,麻煩大家可以在留言區(qū)給出自己的意見和討論,大家是要一起學(xué)習(xí)的 。 廢話不多說,開始今天的題目: 問:說說Python中猴子補(bǔ)丁是什么? 答:在Ruby、Python等動(dòng)態(tài)編程語言中,猴子補(bǔ)丁僅指在運(yùn)行時(shí)動(dòng)態(tài)改變類或模塊,為的是將第三方代碼打補(bǔ)丁在不按預(yù)期運(yùn)行的bug或者feature上 。在運(yùn)行時(shí)動(dòng)態(tài)修改模塊、類或函數(shù),通常是添加功能或修正缺陷。猴子補(bǔ)丁在代碼運(yùn)行時(shí)內(nèi)存中發(fā)揮作用,不會(huì)修改源碼,因此只對(duì)當(dāng)前運(yùn)行的程序?qū)嵗行?。因?yàn)楹镒友a(bǔ)丁破壞了封裝,而且容易導(dǎo)致程序與補(bǔ)丁代碼的實(shí)現(xiàn)細(xì)節(jié)緊密耦合,所以被視為臨時(shí)的變通方案,不是集成代碼的推薦方式。 至于為什么名字叫猴子補(bǔ)丁? 網(wǎng)絡(luò)上有兩種解釋 1,一種解釋,起源于Zope框架,大家在修正Zope的Bug的時(shí)候經(jīng)常在程序后面追加更新部分,這些被稱作是“雜牌軍補(bǔ)丁(guerilla patch)”,后來guerilla就漸漸的寫成了gorllia(猩猩),再后來就寫了monkey(猴子)。 2,第二種解釋是說由于這種方式將原來的代碼弄亂了(messing with it),在英文里叫monkeying about(頑皮的),所以叫做Monkey Patch。 monkey patch的應(yīng)用場(chǎng)景 stackoverflow上有個(gè)比較熱的例子,很多代碼用到 import json,后來發(fā)現(xiàn)ujson性能更高,如果覺得把每個(gè)文件的import json 改成 import ujson as json成本較高,或者說想測(cè)試一下用ujson替換json是否符合預(yù)期,只需要在入口加上: import json 猴子補(bǔ)丁還可以在運(yùn)行時(shí)動(dòng)態(tài)增加模塊的方法,這種場(chǎng)景也比較多,比如我們引用團(tuán)隊(duì)通用庫里的一個(gè)模塊,又想豐富模塊的功能,除了繼承之外也可以考慮用Monkey Patch。 最后,可能這篇文章解釋的不是很具體,大家可以看看下面這個(gè)鏈接,都是國(guó)外大神的解釋,相信你會(huì)學(xué)到更多東西的! https:///questions/5626193/what-is-monkey-patching 如果對(duì)于參考答案有不認(rèn)同的,大家可以在評(píng)論區(qū)指出和補(bǔ)充,歡迎留言! 更多題目: 1、談?wù)剬?duì) Python 和其他語言的區(qū)別? 2、談?wù)剬?duì) Python3 和 Python2 的區(qū)別? 3、Python 的特點(diǎn)和優(yōu)點(diǎn)是什么? 8、說說Python中xrange和range的區(qū)別? 9、Python變量、函數(shù)、類的命名規(guī)則? 10、說說Python可變與不可變數(shù)據(jù)類型? 12、列舉Python中的標(biāo)準(zhǔn)異常類? 19、說說Python多線程與多進(jìn)程的區(qū)別? 21、Python 單引號(hào)、雙引號(hào)、三引號(hào)區(qū)別? 關(guān)注小猿公眾號(hào),每天學(xué)習(xí)一道題 |
|