python編程如何快速上手?
無論是應聘Python方向的web開發,還是爬蟲工程師,或是數據分析,還是自動化運維,都涉及到一些基礎的知識!小編挑了一些Python的基礎面試題,看看你能不能的答上來,也許面試的同學用的著
1.Python這么好,說說它的特性吧
關鍵特性
Python是一種解釋型語言,這意味著,與C,C++不同,Python不需要在運行之前進行編譯。它是邊運行邊解釋的。Python是動態類型化的,這意味著當你聲明它們或類似的東西時,你不需要聲明變量的類型。你可以x=1 ,然后x="abc"是沒有錯誤。Python非常適合面向對象編程,因為它允許定義類以及組合和繼承。Python沒有訪問修飾符。在Python中函數是一等對象,這意味著它們可以在運行時動態創建,能賦值給變量或者作為參數傳給函數,還能作為函數的返回值。
Python代碼容易上手,開發速度很快,但運行速度通常比編譯語言慢。幸運的是,Python允許包含基于C的擴展,所以瓶頸可以被優化掉。
2.單引號、雙引號和三引號之間的區別
單引號和雙引號主要是用來表示字符串比如:單引號:'python'雙引號:"python"
區別:
若你的字符串里面本身包含單引號,必須用雙引號包裹。
比如:"can't find the log "
三引號
三單引號:'''python ''',也可以表示字符串一般用來輸入多行文本,或者用于大段的注釋。
三雙引號:"""python""",一般用在類里面,用來注釋類,這樣省的寫文檔,直接用類的對象doc訪問獲得文檔。
3.Python里面如何拷貝一個對象?
標準庫中的copy模塊提供了兩個方法來實現拷貝.一個方法是copy,它返回和參數包含內容一樣的對象.
使用deepcopy方法,對象中的屬性也被復制
4.Python的數傳遞,是值傳遞還是引用傳遞?
Python的數傳遞有:
位置參數
默認參數
可變參數
關鍵字參數
函數的傳值到底是值傳遞還是引用傳遞,要看情況
不可變參數用值傳遞:
比如像整數和字符串這樣的不可變對象,是通過拷貝進行傳遞的,因為你無論如何都不可能在原處改變不可變對象。
可變參數是用引用傳遞:
比如像列表,字典這樣的對象是通過引用傳遞,和C語言里面的用指針傳遞數組很相似,可變對象能在函數內部改變。
5.什么是lambda函數?它的好處是什么?
lambda 表達式,通常是在需要一個函數,但是又不想費神去命名一個函數的場合下使用,也就是指匿名函數。
lambda函數:首要用途是指點短小的回調函數。
lambda [arguments]:expression
>>> a=lambdax,y:x+y
>>> a(3,11)
好處:
lambda能和def做同樣種類的工作,特別是對于那些邏輯簡單的函數,直接用lambda會更簡潔,而且省去取函數名的麻煩。
6.字符串格式化: %和 .format的區別是什么?
字符串的format函數非常靈活,很強大,可以接受的參數不限個數,并且位置可以不按順序,而且有較為強大的格式限定符(比如:填充、對齊、精度等)。
7.Python是如何進行內存管理的?
Python引用了一個內存池(memory pool)機制,即Pymalloc機制(malloc:n.分配內存),用于管理對小塊內存的申請和釋放
內存池(memory pool)的概念:
當創建大量消耗小存的對象時,頻繁調用new/malloc會導致大量的內存碎片,致使效率降低。內存池的概念就是預先在內存中申請一定數量的,大小相等 的內存塊留作備用,當有新的內存需求時,就先從內存池中分配內存給這個需求,不夠了之后再申請新的內存。這樣做最顯著的優勢就是能夠減少內存碎片,提升效率。
內存池的實現方式很多,性能和適用范圍也不一樣。
python中的內存管理機制——Pymalloc:
python中的內存管理機制都有兩套實現,一套是針對小對象,就是大小小于256bits時,pymalloc會在內存池中申請內存空間;當大于256bits,則會直接執行new/malloc的行為來申請內存空間。 關于釋放內存方面,當一個對象的引用計數變為0時,python就會調用它的析構函數。在析構時,也采用了內存池機制,從內存池來的內存會被歸還到內存池中,以避免頻繁地釋放動作。
8.如何用Python來進行查詢和替換一個文本字符串?
可以使用sub()方法來進行查詢和替換,sub方法的格式為:sub(replacement, string[, count=0])
replacement是被替換成的文本
string是需要被替換的文本
count是一個可選參數,指最大被替換的數量
9.Python里面search()和match()的區別?
match()函數只檢測RE是不是在string的開始位置匹配,search()會掃描整個string查找匹配, 也就是說match()只有在0位置匹配成功的話才有返回,如果不是開始位置匹配成功的話,match()就返回none 。
10.線程如何在Python中實現
Python有一個多線程包threading,可以使用多線程來加快你的代碼。但是Python有一個叫做Global Interpreter Lock(GIL)的構造。GIL確保只有一個'線程'可以在任何時候執行。
線程獲取GIL,做一些工作,然后將GIL傳遞到下一個線程。這種情況發生得非常快,所以對于人眼而言,它可能看起來像你的線程并行執行,但它們實際上只是輪流使用相同的CPU內核。因此GIL的存在使得Python中的多線程無法真正的利用多核的優勢來提高性能。
對于IO密集型操作,在等待操作系統返回的時候會釋放GIL;再比如爬蟲因為有等待的服務器的響應時間,可以利用多線程來加速!但是對于CPU密集型操作,只能通過多進程Multiprocess來加速。
11.Python的參數傳遞,是值傳遞還是引用傳遞?
Python的參數傳遞有:
位置參數
默認參數
可變參數
關鍵字參數
函數的傳值到底是值傳遞還是引用傳遞,要看情況
不可變參數用值傳遞:
比如像整數和串這樣的不可變對象,是通過拷貝進行傳遞的,因為你無論如何都不可能在原處改變不可變對象。
可變參數是用引用傳遞:
比如像列表,字典這樣的對象是通過引用傳遞,和C語言里面的用指針傳遞數組很相似,可變對象能在函數內部改變。
12.數據倉庫是什么?
數據倉庫是一個面向主題的、集成的、穩定的、反映歷史變化的、隨著時間的流逝發生變化的數據集合。它主要支持管理人員的決策分析。
數據倉庫收集了企業相關內部和外部各個業務系統數據源、歸檔文件等一系列歷史數據,最后轉化成企業需要的戰略決策信息。
特點:
面向主題 :根據業務的不同而進行的內容劃分;
集成特性 :因為不同的業務源數據具有不同的數據特點,當業務源數據進入到數據倉庫時,需要采用統一的編碼格式進行數據加載,從而保證數據倉庫中數據的唯一性;
非易失性 :數據倉庫通過保存數據不同歷史的各種狀態,并不對數據進行任何更新操作。
歷史特性 :數據保留時間戳字段,記錄每個數據在不同時間內的各種狀態