2013年5月8日 星期三
python 中 is 和 ==(等於) 的差別
在很多程式語言中,相等的意義有兩種意涵,一種是指那兩個變數實際上是指向同一個物件,另外一種意涵是雖然他們不是相同物件,但是他們的值一樣(什麼叫做值一樣,可以自己寫函數定義)。在 java 中,我們用 == 還比較這兩個變數是否指向相同物件,而使用 object.equal(other) 還比較兩個變數物件的值是否一樣。 在 python 中,則是使用 is 這個關鍵字來判斷這兩個變數是否指向相同物件,而使用 == 來判斷兩個變數物件的值是否一樣(值是否一樣由 __eq__ 這個函數定義)
2013年5月4日 星期六
generator 和 list 簡單比較
這篇文章我第一次發表在 ptt.cc。之後在把它複製過來。下次應該先寫在網誌,在貼 ptt.cc 的 XD
python 的 list comprehension 有分兩種,
一種是[i for i in xrange(5)],這種形式產生出來的是 list
另外一種形式是 (i for i in xrange(5)),這種形式產生出來的是 generator
python 的 list comprehension 有分兩種,
一種是[i for i in xrange(5)],這種形式產生出來的是 list
另外一種形式是 (i for i in xrange(5)),這種形式產生出來的是 generator
python yield 語法與 generator 物件介紹
這篇介紹 yield 語法以及用來維護 yield 行為的 generator 物件。
事實上,yield 和 return 很像,只是當函數呼叫 return 時,該函數 call stack (python 中是 frame) 就會被清除,程式主導權回到呼叫該函數的手上。 而 yield 會把程式主導權交給呼叫該函數的手上,但是他不會把函數的 call stack 清除,因此下次呼叫時,可以從上次未執行的部分開始執行,而不是重新建立一個新 stack。
事實上,yield 和 return 很像,只是當函數呼叫 return 時,該函數 call stack (python 中是 frame) 就會被清除,程式主導權回到呼叫該函數的手上。 而 yield 會把程式主導權交給呼叫該函數的手上,但是他不會把函數的 call stack 清除,因此下次呼叫時,可以從上次未執行的部分開始執行,而不是重新建立一個新 stack。
訂閱:
文章 (Atom)