robot
最新文章(10)
Mqskit 和其它相關工具
CPython 的 GC 二、三事
寫 Mecurial Extension 是件快樂的事!
Mozilla 台灣辨公室徵人啟事
關於 Apple 的兩項專利
core dump 之前的 frame
怎麼發出 beep 聲?
先承認你要找的是奴才吧!
程式碼要清的多乾淨?
FreeBSD 的 Thread-Local Storage 實作
首頁
新編
最新留言
Entries RSS
重要關鍵字(10)
coding (122)
Python (93)
FreeBSD (71)
WEB (61)
URL (48)
hardware (46)
javascript (36)
Linux (34)
blog (30)
C++ (16)
所有關鍵字
新增 URL
Python 的 class 和 tuple 、 list 、 dict
by thinker
2 Columns
關鍵字:
Python
coding
$Python$ 之美,以精簡提供強大的能耐。其中 dictionary (map) 的概念貫穿奇筋八脈,支撐起 $Python$ 的主要內力。另外就是 tuple 、 list 的設計,讓資料的儲存和傳遞得以有效率的描述、傳達。因此, $Python$ programmer 常常以 dictionary 、tuple、list (以下稱為「三者」),承載各種資料,在各模組之間傳遞。雖然方便,卻造就一些問題。 三者在儲存和傳遞資料時,極為方便。不必事先定義其結構,手到之處隨之成形。不需定義欄位、名稱、和型別,只需以固定的順序或 key 儲存,讀取者再依相同規則取出即可。這純然動態的特性,提供極大的方便,避免不必要宣告,使之有更高的可寫性 (writability)。 然而,三者提供了 writability ,卻失去了 readability。三者無法承載欄位的語意 (semantic),對於莫生的資料,沒有提供足夠的線索,以進行猜測和解讀。相對於 class ,卻能提供一些有用的 meta data ,這對可讀性有很大的幫助, programmer 或 maintainer 可以透過 class 提供的資訊,例如欄位名稱,了解資料的語意。 class 的難處,在於 writability 不如三者,無法 just in place 的定義資料的格式,這大大的影嚮 programmer 的產能。但, programming 是一件何其複雜的工作,要處理的事情如雪花,但我們只有一個腦袋,同時間只能處理有限個數的資訊 (暫時記憶的容量大約為七)。因此,在處理大尺度的問題時,我們往往需要將問題抽象化,以降低資訊的數量。這時侯,將抽象概念進行命名就變的極重要。命名能幫助大腦了解抽象的概念,降低大腦的工作量,幫助大尺度問題的理解。 class 和三者各有其優缺點。因此,最好能交叉運用,以收截長補短之效。而其實作方法,必需依據問題本身的特性,而選擇最適的工具。個人建議,三者由於不承載有效的 meta data,因此最好只$應用$於小範圍之內。所謂小範圍,是指運用資訊的程式碼的散佈範圍,最好集中在小區域。單一 function 或單一模組內。如此,以三者承載的資料,能在很小的範圍內取得有效的線索,不致難以理解。對於傳遞較遠的資料,擴及數個函數或模組,最好是以 class 和其 instance 作為載具。資料源離使用處甚遠時,若無 meta data 傳遞語意資訊,在理解上將會有困難。一方面,語意資訊的存放位置較難以確定。另一方面,我們不確定傳遞的過程是否做了哪些改變,造成語意的變化。因此,透過 class 確定資料本身的語意,能有效的幫助理解。 $Python$ 作為一個動態語言, $coding$ 時, programmer 不用特別標定資料的型態。這個寫作上極為方便,但另一方面資料型態能幫助我們理解資料本身,而我們失去了這個好處。為 function 的參數、資料的欄位定一個好名字,是補足的方式。否則,如果無此盡的簡化下去,我們可能退化到指定 data offset (第幾個 byte) 的狀態。很明顯,這並不是我們所希望的。每一個設計都有其利弊,適當的選擇合適的工具,才是聰明的作法。
最後更新時間: 2008-12-07 13:43:49 CST |
引用
查詢:
COMMENTS: