Python基礎技術問題總結

發表於2015-03-25

Introduction

此篇文章總結python一些常見的技術問題,每一個都是簡短的解釋,篇幅不大,不斷更新中…

解釋一下python的 and-or 語法

python的and-or常常被用來實現類C語言中的三元運算子:?, 更騷包的寫法是 xxx and xxx or xxx and xxx or xxx,連線多個表示式,一行就夠了。

但是要注意and-or並不完全等價於三元運算子,因為 a and b or c ,如果b是個假值,那麼將返回c。

不過有技巧能夠實現:

Python裡面如何拷貝一個物件?

這個問題在 python cookbook中有很好的解釋。

標準庫中的copy模組提供了兩個方法來實現拷貝.一個方法是copy,它返回和引數包含內容一樣的物件.

有些時候,你希望物件中的屬性也被複制,可以使用deepcopy方法:

python中如何判斷物件相等

也有一個類似的問題會被面試官問爆,我們不能將這個問題弄混了。

首先是C#中字串的==和equal方法。

“==” :

對於內建值型別而言, == 判斷兩個記憶體值是否相等。

對於使用者自定義的值型別而言(Struct), == 需要過載,否則不能使用。

對於引用型別而言,預設是同一引用才返回true,但是系統過載了很多引用型別的 == (比如下文提到的string),所以c#中引用型別的比較並不建議使用 ==。

“equals” :

對於值型別而言, 記憶體相等才返回true。

對於引用型別而言,指向同一個引用才算相等。

但是比較特殊的是字串String,是一個特殊的引用型型別,在C#語言中,過載了string的equals()方法,使string物件用起來就像是值型別一樣。

python中的 ==

python中的物件包含三要素:id, type, value

id 用來標識唯一一個物件,type標識物件的型別,value用來設定物件的值。

is 判斷是否是一個物件,使用id來判斷的。

== 是判斷a物件的值是否是b物件的值,預設呼叫它的__eq__方法。

什麼是lambda函式?它有什麼好處?

早期自認為看了許多東西,總想把lambda表示式和lambda演算之間的關係研究明白,但是後來發現,文獻中除了說lambda這個名字的由來是借鑑了lambda演算之外,再沒有談及其它。

那麼lambda表示式有什麼好處?匿名函式,一般用來給filter,map這樣的函數語言程式設計服務,map(lambda x: x*2,[1,2,3,4,5])

或者就是一次性產品。類似於這種即用即扔的產品:(lambda x: x*2)(3)

或者作為回撥函式,傳遞給某些應用,比如訊息處理。

請寫出一段Python程式碼實現刪除一個list裡面的重複元素

可能有人用迴圈對比刪除的辦法去實現,不過有一個更優雅的辦法,list(set(li))。

命名技巧

今天閱讀程式碼,發現一個不錯的函式命名方式:

就是把所有的引數前面都加上_下劃線,這樣你在函式體中,一眼就可以看出那些是區域性變數,那些是作為引數傳入的,類似把全域性變數前面加上g。

相關文章