精心整理的8道Python面試題,你答不答的出來

2021-08-17 21:21:13 字數 3286 閱讀 3613

** | 菜鳥學python

no.1

python這麼好

說說它的特性吧

關鍵特性

python是一種解釋型語言,這意味著,與c,c++不同,python不需要在執行之前進行編譯。它是邊執行邊解釋。

python是動態型別化的,這意味著當你宣告它們或類似的東西時,你不需要宣告變數的型別。你可以x=1 ,然後x="abc"沒有錯誤。

python非常適合物件導向程式設計,因為它允許定義類以及組合和繼承。python沒有訪問修飾符(如c ++的public,private).

在python中函式是一等物件,這意味著它們可以在執行時動態建立,能賦值給變數或者作為引數傳給函式,還能能作為函式的返回值

python**容易上手,開發速度很快,但執行速度通常比編譯語言慢。幸運的是,python允許包含基於c的擴充套件,所以瓶頸可以被優化掉,比如,numpy包就是乙個很好的例子,它非常快,因為它所做的很多運算在底部都是用c編寫的!

no.2

python中的賦值

淺拷貝和深拷貝的區別

深淺拷貝區別

1).物件的賦值

python中物件的賦值實際上是簡單的物件引用也就是說,當你建立乙個物件,然後把它複製給另乙個變數的時候,python並沒有拷貝這個物件,而是拷貝了這個物件的引用。

2).淺拷貝

一般使用copy.copy(),可以進行物件的淺拷貝.它複製了物件但對於物件中的元素,依然使用原始的引用.

使用copy對a進行淺拷貝,b複製了a的物件,但是b裡面的[2,3,4]和a裡面的[2,3,4]其實都是指向同一塊記憶體位址,所以改變了a[1]之後,b裡面的b[1]也發生了改變!

3).深度拷貝

深度拷貝需要用copy.deepcopy()進行深拷貝。它會複製乙個容器物件,以及它裡面的所有元素(包含元素的子元素)

當對a列表進行深度拷貝之後,b複製了a的物件,但是b裡面的[2,3,4]和a裡面的[2,3,4]其實都是指向不同的記憶體位址.

no.3

python中的==

和is的區別

==和is

python中==和is的區別

is是判讀物件識別符號是否一致,而==是判讀兩個物件的內容是否相等!

x is y 相當於 id(x)==id(y)

==是檢查兩個物件的內容是否相等,會呼叫物件的內部__eq__().

no.4

執行緒如何在python

中實現多執行緒問題

執行緒如何在python中實現

python有乙個多執行緒包threading,可以使用多執行緒來加快你的**。但是python有乙個叫做global interpreter lock(gil)的構造。gil確保只有乙個'執行緒'可以在任何時候執行。

執行緒獲取gil,做一些工作,然後將gil傳遞到下乙個執行緒。這種情況發生得非常快,所以對於人眼而言,它可能看起來像你的執行緒並行執行,但它們實際上只是輪流使用相同的cpu核心。因此gil的存在使得python中的多執行緒無法真正的利用多核的優勢來提高效能。

對於io密集型操作,在等待作業系統返回的時候會釋放gil;再比如爬蟲因為有等待的伺服器的響應時間,可以利用多執行緒來加速!但是對於cpu密集型操作,只能通過多程序multiprocess來加速。

no.5

python中的

猴子補丁式啥

猴子補丁

python中的猴子補丁是什麼?

考慮下面的例子:

f()猴子補丁:

是一種非常pythonic的用法,即函式在python中可以像使用變數一樣對它進行賦值等操作,我們可以在執行時動態替換模組,俗稱手法稱為猴子補丁!我們通過對myclass.f 重新賦值,動態的改變了輸出的結果.

python中的

負數index

負值索引

python中的負數index是用來做什麼的?

python中的序列是索引的,它由正數和負數組成。正的數字使用'0'作為第乙個索引,'1'作為第二個索引。

負數的索引從'-1'開始,表示序列中的最後乙個索引,'-2'作為倒數第二個索引,序列像正數一樣向前。

負數索引也可以用來非常方便的切片,比如:

s='abcdedf'

print (s[1:-1])

>>bcded

no.7

類裡面的new

和init的區別

new/init區別

說說__new__和__init__的區別

__init__為初始化方法,而__new__方法才是是真正的建構函式。只有繼承了object的新式類才有__new__.

__new__至少要有乙個引數cls,代表要例項化的類,此引數在例項化時由python直譯器自動提供,__new__必須要有返回值,返回例項化出來的例項。

__init__有乙個引數self,就是這個__new__返回的例項, 先執行__new__ 然後才執行__init__.

__init__在__new__的基礎上可以完成一些其它初始化的動作,__init__不需要返回值.

no.8

python中的

引數*args和**kwargs

python中的*args,**kwargs的用法

*args是可變引數,一般用來表示我們不能確定多少引數將被傳遞給函式,或者如果我們想用列表或元組的方式傳遞給函式.

**kwars是可變關鍵字引數,當我們不知道有多少關鍵字引數會傳遞給乙個函式時,或者想把乙個字典作為關鍵字引數時使用

注:*args和**kwargs可以同時在函式的定義中,但是*args必須在**kwargs前面.

end

CSS精心整理的面試題

css精心整理的面試題 1 設定邊框的樣式用border style實現,設定邊框的顏色用border color實現 2 css的語法由選擇器 屬性 值三部分組成 3 設定乙個div的最小寬度為50畫素,最大高度為100畫素,實現這兩個設定的方法是min width 50px max height...

CSS精心整理的面試題

css精心整理的面試題 1 設定邊框的樣式用border style實現,設定邊框的顏色用border color實現 2 css的語法由選擇器 屬性 值三部分組成 3 設定乙個div的最小寬度為50畫素,最大高度為100畫素,實現這兩個設定的方法是min width 50px max height...

精心整理python自動化測試小技巧二

31.字典的查詢預設函式 dict.setdefault 鍵 值 如果找不到此鍵就返回後面的值 32.淺拷貝 list dict copy 深拷貝 import copy a copy.deepcopy b 33.在for迴圈中,xrange 比range 更好,因為x不會建立列表,然後再迭代,而是...