Python 到底是 pass by value 還是 pass by reference? 一次搞懂程式語言的函式傳參!
近日在思考 C++ 的指標問題時,意外翻到去年我在 SegmentFault 上給網友的一篇回答, 裡面詳細地討論了關於函數傳參的問題,覺得應該有不少參考價值,看完應該能夠對各種函數傳參方式有一點領悟, 故整理於此,希望能對大家有所幫助。 原本的問題 該網友有一段程式碼如下: class Count: def __init__(self, count=0): self.count = count def increment(c, times): c.count += 1 print('c:', c.count) times += 1 print('t:', times) def main(): c = Count() times = 0 for i in range(100 ...
小小步邁向 Pythonic (1) - 利用長字串分割以製造字串清單
我這個人一直有點完美主義,導致拖延症成為萬年宿疾,雖然對於寫作和教學有著極強烈的慾望,但是老是為了我沒辦法把事情說得很完整、很完美而苦腦,我決定要克服這些問題,最好的方式就是讓自己不要想那麼多,開始寫就對了,那究竟要寫些什麼呢?為了防止大主題成為持續的絆腳石,我決定開始這個 小小步邁向 Pythonic 的系列。 目前的打算是,讓這個系列收錄我這些年領悟到的一些 Pythonic 技巧,這些技巧彼此之間都會非常獨立,也非常零碎,同時也會非常單純,這種零散的狀態可以讓我比較沒有顧慮地隨意揮灑,算是讓自己養成持續寫作的習慣,不過大家可能也要忍受一下這個系列的無序和過度自由,同時,每篇文章的長短、深度和廣度可能都會不同,甚至差異很大。 這些文章中可能包含了很多我個人的看法,你可能有很多的不認同,這是正常現象!許多時候我們對於 code 的美感和認知並不相同,當然也可能是目前我的見識不夠,所以請大家一定要保持獨立思考的精神,去選擇你覺得有幫助的作法來邁向 Pythonic!當然也歡迎大家留言告訴我更好的作法。 總之,讓我們一起前進吧。 製造一個 字串清單 是一件累人的事情,尤其是在字串數量龐大的時候,因為我們必須得鍵入大量的引號和逗號。 下面的 names 就是一個不短的人名清單(list ...
Don't Reinvent Sandwich 2: Context Manager
今年的 Pycon Taiwan,有一篇我滿感興趣的演講:Don't Reinvent Sandwich - Python Decorator and Context Manager,講者是蕭聖穎先生。 該演講的 投影片 和講者的 Facebook。 由於我對於語言本身的設計和使用慣例非常感興趣,所以就去朝聖了一下。講題的主旨大略是:我們通常透過抽取一段重複出現的 連續代碼 成為 函數 (function) 或 類別 (class) 來重複利用他,避免重複發明輪子。但有的時候想要抽取的部分並非 中間 ( 三明治的餡)連續的部分,而是 頭尾 (三明治的麵包),這個時候我們便需要使用一些其他的手法或機制來達到 reuse 的目的了。Python 正好非常友善地提供了 裝飾器 (decorator) 和 環境管理器 (context manager),可以很容易地達成我們的目的 ...
Don't Reinvent Sandwich: Decorator
今年的 Pycon Taiwan,有一篇我滿感興趣的演講:Don't Reinvent Sandwich - Python Decorator and Context Manager,講者是蕭聖穎先生。 該演講的 投影片 和講者的 Facebook。 由於我對於語言本身的設計和使用慣例非常感興趣,所以就去朝聖了一下。講題的主旨大略是:我們通常透過抽取一段重複出現的 連續代碼 成為 函數 (function) 或 類別 (class) 來重複利用他,避免重複發明輪子。但有的時候想要抽取的部分並非 中間 ( 三明治的餡)連續的部分,而是 頭尾 (三明治的麵包),這個時候我們便需要使用一些其他的手法或機制來達到 reuse 的目的了。Python 正好非常友善地提供了 裝飾器 (decorator) 和 環境管理器 (context manager),可以很容易地達成我們的目的 ...