1.Python這么好兰吟,說說它的特性吧
關(guān)鍵特性
Python是一種解釋型語言,這意味著茂翔,與C混蔼,C++不同,Python不需要在運(yùn)行之前進(jìn)行編譯珊燎。它是邊運(yùn)行邊解釋的惭嚣。Python是動(dòng)態(tài)類型化的,這意味著當(dāng)你聲明它們或類似的東西時(shí)悔政,你不需要聲明變量的類型晚吞。你可以x=1 ,然后x="abc"是沒有錯(cuò)誤谋国。Python非常適合面向?qū)ο缶幊滩鄣兀驗(yàn)樗试S定義類以及組合和繼承。Python沒有訪問修飾符芦瘾。在Python中函數(shù)是一等對(duì)象捌蚊,這意味著它們可以在運(yùn)行時(shí)動(dòng)態(tài)創(chuàng)建,能賦值給變量或者作為參數(shù)傳給函數(shù)近弟,還能作為函數(shù)的返回值缅糟。
Python代碼容易上手,開發(fā)速度很快祷愉,但運(yùn)行速度通常比編譯語言慢窗宦。幸運(yùn)的是,Python允許包含基于C的擴(kuò)展谣辞,所以瓶頸可以被優(yōu)化掉迫摔。
2.單引號(hào)沐扳、雙引號(hào)和三引號(hào)之間的區(qū)別
單引號(hào)和雙引號(hào)主要是用來表示字符串比如:單引號(hào):'python'雙引號(hào):"python"
區(qū)別:
若你的字符串里面本身包含單引號(hào),必須用雙引號(hào)包裹泥从。
比如:"can't find the log "
三引號(hào)
三單引號(hào):'''python ''',也可以表示字符串一般用來輸入多行文本,或者用于大段的注釋。
三雙引號(hào):"""python"""沪摄,一般用在類里面,用來注釋類,這樣省的寫文檔,直接用類的對(duì)象doc訪問獲得文檔躯嫉。
3.Python里面如何拷貝一個(gè)對(duì)象?
標(biāo)準(zhǔn)庫(kù)中的copy模塊提供了兩個(gè)方法來實(shí)現(xiàn)拷貝.一個(gè)方法是copy,它返回和參數(shù)包含內(nèi)容一樣的對(duì)象.
使用deepcopy方法,對(duì)象中的屬性也被復(fù)制
4.Python的數(shù)傳遞杨拐,是值傳遞還是引用傳遞祈餐?
Python的數(shù)傳遞有:
位置參數(shù)
默認(rèn)參數(shù)
可變參數(shù)
關(guān)鍵字參數(shù)
函數(shù)的傳值到底是值傳遞還是引用傳遞,要看情況
不可變參數(shù)用值傳遞:
比如像整數(shù)和字符串這樣的不可變對(duì)象哄陶,是通過拷貝進(jìn)行傳遞的帆阳,因?yàn)槟銦o論如何都不可能在原處改變不可變對(duì)象。
可變參數(shù)是用引用傳遞:
比如像列表屋吨,字典這樣的對(duì)象是通過引用傳遞蜒谤,和C語言里面的用指針傳遞數(shù)組很相似山宾,可變對(duì)象能在函數(shù)內(nèi)部改變。
5.什么是lambda函數(shù)鳍徽?它的好處是什么?
lambda 表達(dá)式资锰,通常是在需要一個(gè)函數(shù),但是又不想費(fèi)神去命名一個(gè)函數(shù)的場(chǎng)合下使用阶祭,也就是指匿名函數(shù)绷杜。
lambda函數(shù):首要用途是指點(diǎn)短小的回調(diào)函數(shù)。
lambda [arguments]:expression
>>> a=lambdax,y:x+y
>>> a(3,11)
好處:
lambda能和def做同樣種類的工作濒募,特別是對(duì)于那些邏輯簡(jiǎn)單的函數(shù)鞭盟,直接用lambda會(huì)更簡(jiǎn)潔,而且省去取函數(shù)名的麻煩瑰剃。
6.字符串格式化: %和 .format的區(qū)別是什么懊缺?
字符串的format函數(shù)非常靈活,很強(qiáng)大,可以接受的參數(shù)不限個(gè)數(shù)培他,并且位置可以不按順序鹃两,而且有較為強(qiáng)大的格式限定符(比如:填充、對(duì)齊舀凛、精度等)俊扳。
7.Python是如何進(jìn)行內(nèi)存管理的?
Python引用了一個(gè)內(nèi)存池(memory pool)機(jī)制猛遍,即Pymalloc機(jī)制(malloc:n.分配內(nèi)存)馋记,用于管理對(duì)小塊內(nèi)存的申請(qǐng)和釋放
內(nèi)存池(memory pool)的概念:
當(dāng)創(chuàng)建大量消耗小存的對(duì)象時(shí),頻繁調(diào)用new/malloc會(huì)導(dǎo)致大量的內(nèi)存碎片懊烤,致使效率降低梯醒。內(nèi)存池的概念就是預(yù)先在內(nèi)存中申請(qǐng)一定數(shù)量的,大小相等 的內(nèi)存塊留作備用腌紧,當(dāng)有新的內(nèi)存需求時(shí)茸习,就先從內(nèi)存池中分配內(nèi)存給這個(gè)需求,不夠了之后再申請(qǐng)新的內(nèi)存壁肋。這樣做最顯著的優(yōu)勢(shì)就是能夠減少內(nèi)存碎片号胚,提升效率。
內(nèi)存池的實(shí)現(xiàn)方式很多浸遗,性能和適用范圍也不一樣猫胁。
python中的內(nèi)存管理機(jī)制——Pymalloc:
python中的內(nèi)存管理機(jī)制都有兩套實(shí)現(xiàn),一套是針對(duì)小對(duì)象跛锌,就是大小小于256bits時(shí),pymalloc會(huì)在內(nèi)存池中申請(qǐng)內(nèi)存空間弃秆;當(dāng)大于256bits,則會(huì)直接執(zhí)行new/malloc的行為來申請(qǐng)內(nèi)存空間。 關(guān)于釋放內(nèi)存方面菠赚,當(dāng)一個(gè)對(duì)象的引用計(jì)數(shù)變?yōu)?時(shí)盼樟,python就會(huì)調(diào)用它的析構(gòu)函數(shù)。在析構(gòu)時(shí)锈至,也采用了內(nèi)存池機(jī)制晨缴,從內(nèi)存池來的內(nèi)存會(huì)被歸還到內(nèi)存池中,以避免頻繁地釋放動(dòng)作峡捡。
8.如何用Python來進(jìn)行查詢和替換一個(gè)文本字符串击碗?
可以使用sub()方法來進(jìn)行查詢和替換,sub方法的格式為:sub(replacement, string[, count=0])
replacement是被替換成的文本
string是需要被替換的文本
count是一個(gè)可選參數(shù)们拙,指最大被替換的數(shù)量
9.Python里面search()和match()的區(qū)別稍途?
match()函數(shù)只檢測(cè)RE是不是在string的開始位置匹配,search()會(huì)掃描整個(gè)string查找匹配, 也就是說match()只有在0位置匹配成功的話才有返回砚婆,如果不是開始位置匹配成功的話械拍,match()就返回none 。
10.線程如何在Python中實(shí)現(xiàn)
Python有一個(gè)多線程包threading装盯,可以使用多線程來加快你的代碼坷虑。但是Python有一個(gè)叫做Global Interpreter Lock(GIL)的構(gòu)造。GIL確保只有一個(gè)'線程'可以在任何時(shí)候執(zhí)行埂奈。
線程獲取GIL迄损,做一些工作,然后將GIL傳遞到下一個(gè)線程账磺。這種情況發(fā)生得非城鄣校快,所以對(duì)于人眼而言垮抗,它可能看起來像你的線程并行執(zhí)行氏捞,但它們實(shí)際上只是輪流使用相同的CPU內(nèi)核。因此GIL的存在使得Python中的多線程無法真正的利用多核的優(yōu)勢(shì)來提高性能冒版。
對(duì)于IO密集型操作液茎,在等待操作系統(tǒng)返回的時(shí)候會(huì)釋放GIL;再比如爬蟲因?yàn)橛械却姆?wù)器的響應(yīng)時(shí)間壤玫,可以利用多線程來加速豁护!但是對(duì)于CPU密集型操作哼凯,只能通過多進(jìn)程Multiprocess來加速欲间。
11.Python的參數(shù)傳遞,是值傳遞還是引用傳遞断部?
Python的參數(shù)傳遞有:
位置參數(shù)
默認(rèn)參數(shù)
可變參數(shù)
關(guān)鍵字參數(shù)
函數(shù)的傳值到底是值傳遞還是引用傳遞猎贴,要看情況
不可變參數(shù)用值傳遞:
比如像整數(shù)和串這樣的不可變對(duì)象,是通過拷貝進(jìn)行傳遞的,因?yàn)槟銦o論如何都不可能在原處改變不可變對(duì)象她渴。
可變參數(shù)是用引用傳遞:
比如像列表达址,字典這樣的對(duì)象是通過引用傳遞,和C語言里面的用指針傳遞數(shù)組很相似趁耗,可變對(duì)象能在函數(shù)內(nèi)部改變沉唠。
12.數(shù)據(jù)倉(cāng)庫(kù)是什么?
數(shù)據(jù)倉(cāng)庫(kù)是一個(gè)面向主題的苛败、集成的满葛、穩(wěn)定的、反映歷史變化的罢屈、隨著時(shí)間的流逝發(fā)生變化的數(shù)據(jù)集合嘀韧。它主要支持管理人員的決策分析。
數(shù)據(jù)倉(cāng)庫(kù)收集了企業(yè)相關(guān)內(nèi)部和外部各個(gè)業(yè)務(wù)系統(tǒng)數(shù)據(jù)源缠捌、歸檔文件等一系列歷史數(shù)據(jù)锄贷,最后轉(zhuǎn)化成企業(yè)需要的戰(zhàn)略決策信息。
特點(diǎn):
面向主題 :根據(jù)業(yè)務(wù)的不同而進(jìn)行的內(nèi)容劃分曼月;
集成特性 :因?yàn)椴煌臉I(yè)務(wù)源數(shù)據(jù)具有不同的數(shù)據(jù)特點(diǎn)谊却,當(dāng)業(yè)務(wù)源數(shù)據(jù)進(jìn)入到數(shù)據(jù)倉(cāng)庫(kù)時(shí),需要采用統(tǒng)一的編碼格式進(jìn)行數(shù)據(jù)加載哑芹,從而保證數(shù)據(jù)倉(cāng)庫(kù)中數(shù)據(jù)的唯一性因惭;
非易失性 :數(shù)據(jù)倉(cāng)庫(kù)通過保存數(shù)據(jù)不同歷史的各種狀態(tài),并不對(duì)數(shù)據(jù)進(jìn)行任何更新操作绩衷。
歷史特性 :數(shù)據(jù)保留時(shí)間戳字段蹦魔,記錄每個(gè)數(shù)據(jù)在不同時(shí)間內(nèi)的各種狀態(tài)