** | 菜鳥學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不會建立列表,然後再迭代,而是...