網頁

搜尋此網誌

2013年5月6日 星期一

徹底研究Python:談標準程式庫

徹底研究Python:談標準程式庫(standard library)。

Pyhton提供的標準程式庫相當多,去除特定平台,大致上可以分成26類服務,大概有239個模組。
  1. String Services (11)
  2. Data Types (19)
  3. Numeric and Mathematical Modules (9)
  4. File and Directory Access (12)
  5. Data Persistence (13)
  6. Data Compression and Archiving (5)
  7. File Formats (6)
  8. Cryptographic Services (4)
  9. Generic Operating System Services (17)
  10. Optional Operating System Services (9)
  11. Interprocess Communication and Networking (7)
  12. Internet Data Handling (16)
  13. Structured Markup Processing Tools (15)
  14. Internet Protocols and Support (25)
  15. Multimedia Services (10)
  16. Internationalization (2)
  17. Program Frameworks (2)
  18. Graphical User Interfaces with Tk (5)
  19. Development Tools (5)
  20. Debugging and Profiling (5)
  21. Python Runtime Services (17)
  22. Custom Python Interpreters (2)
  23. Restricted Execution (2)
  24. Importing Modules (7)
  25. Python Language Services (13)
  26. Miscellaneous Services (1)

詳細的說明可以參閱官網的The Python Standard Library。這理必須提到Python的哲學,Python具有「batteries included」,battery指的就是這些標準程式庫,這些標準程式庫都是一般普遍常用的功能,能夠立即解決功能上的需求,因此開發時不太需要額外安裝其他程式庫。

###

2013年4月23日 星期二

The $100 Startup 小資創業老闆的實戰成功術

近一兩年以來,出現很多創業與創投的相關書籍,這些書多半討論科技網路方面的創業內容(例如成立網路公司、利用創投基金開始...),對於不是在科技網路領域創業的人而言,這些書的幫助有限。

現在「3000元開始的自主人生」這本以相當務實的角度出發,利用「小資(即書名的$100美金)」開始自己的「微型創業」之路,作者古利博(Chris Guillebeau)訪問相當多的微型創業老闆,分析並研究這些創業歷程,他找出實際可行的方法,在書中教導大家如何從事自己所愛的事情,以及如何創造「錢途」,這本書不講高深複雜的商業知識,而是提供立即可用的實戰技術。


古利博(Chris Guillebeau)著,連育德譯,3000元開始的自主人生:50位小資創業老闆的實戰成功術,台北市:天下遠見,2013。
譯自:The $100 Startup: reinvent the way you make a living, do what you love, and create a new feature

整本書的架構分成三部曲共14章,「創業首部曲」主要是建立正確的小資創業觀念,自己創業是為了什麼?為了做自己想要的事情(興趣),還是因為意外解雇而不得不的選擇之一,不管為何,創業是為了追尋自己所要的自由,而創造價值則是通往成功創業的途徑。

這本書最重要的一點是;「唯有提供價值給別人,才能獲得工作自由。」利用自己的專長或興趣去創造出別人所需要的產品或服務,這是微型創業成功的關鍵!如何提供別人所需的價值呢?這本書都有一些方法讓你找出來。

「創業二部曲」則是討論創業之後的工作,主要以行銷方面為主,如何開始第一筆生意,如何讓別人知道你的服務或產品,還有重要的訂價策略,價格取決於你提供的價值,而不是工作的時間。最後「創業三部曲」是討論創業上軌道後的事情,例如事業如何持續成長,商業模式的規劃等。

###

2013年4月19日 星期五

amazon.com的秘密

這是一本講述亞馬遜公司(amazon.com)從創業至成功的故事書,輕鬆地閱讀這本書來認識amazon.com,瞭解它成功的原因,為何貝佐斯(Jeffrey Preston Bezos)要從賣書這個領域開始,時間若回到亞馬遜創立的1994年,就不得不佩服他洞燭先機!

貝佐斯發現當時網際網路一年是成長23倍,他認為快速成長就代表無限商機,分析潛力商品發現賣書是最有機會的一條路,因為書本市場夠大、易於運送、不需庫存...等,加上書本的資料非常容易用電腦與網路去搜尋和管理,顧客可以用網路找書、買書。天時地利之下,貝佐斯本身也是個聰明人,也喜歡閱讀,最重要的一點,顧客至上,「點一下還不夠」,提供客戶更好的服務,這也是所有成功企業的重要基本要素,從下面這段話可以看到。

「我們要成為全世界最重視顧客的企業,無論人們想要在網路上買什麼東西,都可以在我們的網站上找到。」亞馬遜的企業使命 p. 33


理察‧布蘭特(Richard L. Brandt)著,閻紀宇譯,amazon.com的秘密,台北市,天下雜誌,2012。
譯自:One Click: Jeff Bezos and the Rise of Amazon.com

書中除了敘述這些成功過程之外,部分也描述亞馬遜如何壓榨員工的故事,也有商場上競爭的故事,整體而言,這本書完整而有秩序的介紹亞馬遜,閱讀上建議從頭開始讀起。

最後,書中附錄有一段「貝佐斯2010年普林斯頓大學畢業演講摘錄」,這段演講也可以在TouTube上看到完整演說。


貝佐斯(Jeff Bezos):仁慈比聰明困難。(It is Harder to be Kind than Clever.)...聰明是天賦,仁慈是選擇。天賦與身俱來,但是選擇就難了。如果不小心,你們可能就會被聰明誘使做了傷害仁慈的選擇。

###

2013年4月8日 星期一

Clean Code 無瑕的程式碼

最近這本『無瑕的程式碼』非常熱門!除了廣告打的兇之外(暢銷的書總是一開始就暢銷),重點在於作者和書的內容,Bob 大叔 (即Robert C. Martin) 也是另一本經典著作『敏捷軟體開發:原則、樣式及實務』的作者,不論你是否認同敏捷軟體開發 (Agile Software Development),只要是撰寫程式的軟體開發人員都要好好閱讀這本 Clean Code,因為我相信大家都會遇到這樣的事情:

公司急於讓產品完成上市,導致程式碼慢慢變得一團亂。加入越來越多的功能,程式碼越來越糟糕。每次修改程式也讓程式碼更加混亂、曲折及可怕,程式碼越來越龐大、艱深且複雜。

生產力漸漸降低,於是管理者想辦法招募更多新員工,由於新員工不知原始系統的設計,因而修改將破壞原本設計的原意,程式碼趨近崩解的邊緣。於是開發人員提出無法在現有設計上繼續開發下去,新的專案油然而生...持續陷入永無止境的迴圈之中,總是希望下一個軟體專案會更好。

這樣的問題到底出在哪裡?


Robert C. Martin 著,戴于晉、博碩文化編譯,無瑕的程式碼:敏捷軟體開發技巧守則,新北市:博碩文化,2013。
譯自:Clean Code: a handbook of agile software craftsmanship

作者 Martin 先生認為在於軟體開發人員(程式設計師)的態度,程式設計師沒有專業的把程式碼撰寫優良,導致劣質的程式碼慢慢腐蝕軟體的進度和品質,解決之道是『Clean Code』!

Bob 大叔將本書分成3大部分,第一部份(第1至第10章)說明什麼是無瑕的程式碼與 Clean Code 的原則、模式和實踐方式,第二部份(第11至第16章)則是以一些案例進行討論程式碼的清理 (clean)。最後第三部份(第17章)則是『程式碼氣味型錄』,記錄這本書中 Clean Code 的心得,這部份算是重點整理。(在序中沒有明確說明章節是第幾部分,這裏是看內容後自己劃分的)

整本書相當精彩,閱讀起來也相當舒適,可以感覺博碩文化出版的用心。書中提到博碩文化在這個『名家名著系列』 的願景,這裡不得不推崇一下出版社的堅持和貢獻,希望未來台灣與華人地區有更多經典著作的中文翻譯書籍。

###

2013年4月5日 星期五

Virtualization 虛擬化技術

這篇文章將簡述虛擬化技術(virtualization),主要目的是將一些觀念說明清楚,因為現在大家對於虛擬化好像都只知道CPU的虛擬化,其實虛擬化的範圍很廣,有必要讓大家都知道。主要參考資料是『雲端策略』這本書,由陳瀅 等著,天下文化所出版。

虛擬化概念是在1950年代首次提出,到1960年代才在IBM大型主機上實現商用。電腦系統之所以可以虛擬化,原因在於電腦系統分為若干層次,在這些不同層次之間建構虛擬化層,對使用者提供與真實系統相同或類似的功能,使得上層系統可以運行在該中間層(虛擬化層)之上。由於中間層解除上下兩層間原本存在的耦合關係,使上層的運行不依賴下層的具體實作方式。

虛擬化的對象主要是各式各樣的電腦資源,經過虛擬化後的邏輯資源對使用者隱藏了不必要的細節,使用者可以在虛擬環境中實現其在真實環境中的部分或者全部功能。以電腦資源區分虛擬化技術有:
  • 硬體資源
    • CPU虛擬化
      • 軟體:全虛擬化(Full Virtualization)、半虛擬化(Para-Virtualization)
      • 硬體(硬體輔助虛擬化,hardware assisted virtualization ):Intel®VTAMD-V™
    • 記憶體虛擬化(虛擬記憶體)
      • 影子分頁表法
      • 分頁表寫入法
    • I/O虛擬化
    • 伺服器虛擬化:CPU虛擬化+記憶體虛擬化+I/O虛擬化
      • 原生虛擬化:虛擬化平台(hypervisor)
      • 寄宿虛擬化:虛擬機監視器(Virtual Machine Monitor, VMM)
    • 儲存虛擬化
      • 基於儲存設備虛擬化:磁碟陣列(Redundant Array of Inexpensive Disks, RAID)
      • 基於網路虛擬化:網路附加儲存(Network Attached Storage, NAS)與儲存區域網(Storage Area Network, SAN)
    • 網路虛擬化
      • 區域網路虛擬化:虛擬區域網路(Virtual LAN, VLAN)
      • 廣域網路虛擬化:虛擬私有網路(Virtual Private Network, VPN)
  • 軟體資源
    • 作業系統虛擬化
    • 檔案系統虛擬化
    • 桌面虛擬化(Desktop Virtualization)
    • 應用程式虛擬化(Application Virtualization)
    • 高階語言虛擬化
可以看到在CPU虛擬化的部份,一般大家說的全虛擬化、半虛擬化是指用軟體去模擬CPU,顯然這種方式一定比硬體輔助虛擬化的方式效率要差,目前幾乎都是使用硬體輔助虛擬化。注意到,除了CPU虛擬化之外,其實還有記憶體虛擬化、I/O虛擬化、儲存虛擬化、網路虛擬化等不同的資源虛擬化,不要只認為虛擬化都是指硬體CPU的部份,這是不完整的觀念!

###

2013年4月2日 星期二

Catalog of Design Patterns 設計模式型錄

這裡將列出物件導向程式設中的「設計模式」型錄,資料是節錄自「物件導向設計模式:可再利用物件導向軟體之要素(Design Patterns: Elements of resuable object-oriented software)」這本書的內容,此書作者是Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides著(所稱「四人幫」),由葉秉哲先生所翻譯,台灣培生教育出版,可以在天瓏書局購買(好像也只有天瓏有賣)。

下列型錄包含3大類共23個設計模式,並列出其目的。

生成模式(Creational Patterns)
將物件具現化的過程抽象化地加以萃取,使系統能獨立於物件的建立、組成及表現方式之外。
  • 工廠方法模式(Factory Method)
    定義可資生成物件的介面,但讓子類別去決定該具現出哪一種類別的物件。此模式讓類別將具現化程序交付給子類別去處置。
  • 抽象工廠模式(Abstract Factory)
    以同一個介面來建立一整族相關或相依的物件,不需點明各物件真正所屬的具象類別。
  • 建造者模式(Builder)
    從複雜物件的佈局中抽取出生成程序,以便用同一個生成程序製造各種不同的物件佈局。
  • 原型模式(Prototype)
    制訂可用原型個體生成的物件類型,爾後只須複製此原型即可生成新物件。
  • 獨體模式(Singleton)
    確保類別只會有一個物件實體存在,並提供單一存取窗口。

結構模式(Structural Patterns)
在探討如何以類別和物件組合成大型的結構。
  • 轉接器模式(Adapter)
    將類別的介面轉換成外界所預期的另一種介面,讓原先囿於介面不相容問題而無法協力合作的類別能夠兜在一起用。
  • 橋接模式(Bridge)
    將實作體系與抽象體系分離開來,讓兩者能各自更動各自演進。
  • 組合模式(Composite)
    將物件組織成樹狀結構、「部分─全體」層級關係,讓外界以一致性的方式對待個別物件和整體物件。
  • 裝飾模式(Decorator)
    將額外權責動態附加於物件身上,不必衍生子賴別即可彈性擴增功能。
  • 外觀模式(Façade)
    替子系統裡一堆介面定義一套統一的高階介面,讓子系統更易使用。
  • 享元模式(Flyweight )
    以共享機制有效地支援一大堆小規模的物件。
  • 代理模式(Proxy)
    替其他物件預留代理者空位,藉此控制存取其他物件。

行為模式(Behavioral Patterns)
探討物件之間的演算法及權責分配問題。
  • 解譯器模式(Interpreter)
    針對標的語言定義出文法,以及可解讀這種語句的解釋器。
  • 範本方法模式(Template Method)
    對於操作,只先定義好演算法的輪廓,某些步驟則留給子類別去填補,以便在不改變演算法整體構造的情形下讓子類別去精鍊某些步驟。
  • 職責鏈模式(Chain of Responsibility)
    讓多個物件都有機會處理某一訊息,以降低訊息發送者和接收者之間的耦合關係。它將接收者物件串連起來,讓訊息流經其中,直到被處理了為止。
  • 命令模式(Command)
    將訊息封裝成物件,以便能用各種不同訊息、暫存、記錄、復原等方式加以參數化處理。
  • 迭代器模式(Iterator)
    毋須知曉聚合物件的內部細節,即可依序存取內含的每一個元素。
  • 仲介者模式(Mediator)
    定義可將一群物件互動方式封裝起來的物件。因為物件彼此不直接相互指涉,所以耦合性低,容易逐一變更互動關係。
  • 備忘錄模式(Memento)
    在不違反封裝性的前提下,捕捉物件的內部狀態並存在外面,以便日後回復至此一狀態。
  • 觀察者模式(Observer)
    定義一對多的物件依存關係,讓物件狀態一有變動,就自動通知其他相依物件作該做的更新動作。
  • 狀態模式(State)
    讓物件的外顯行為隨內部狀態改變而改變,彷彿連類別也變了似的。
  • 策略模式(Strategy)
    定義一整族演算法,將每一個演算法封裝起來,可互換使用,更可在不影響外界的情況下個別抽換所引用的演算法。
  • 訪問者模式(Visitor)
    定義能逐一施行於物件結構裡各個元素的操作,讓你不必修改作用對象的類別介面,就能定義新的操作。
對於上述設計模式的目的說明,看完與看懂是兩種不同的境界,若以投手與捕手做例子,看完23個設計模式就像捕手可以接到投手所投的球,但這不表示捕手知道投手為什麼會投這樣的球,看懂則是進入知其然的境界了。

###

2013年3月27日 星期三

Refactoring: Improving the Design of Existing Code 重構:改善既有程式的設計

什麼是重構(Refactoring)?所謂重構是這樣的一個過程:「在不改變程式碼外在行為的前提下,對程式碼做出修改,以改進程式的內部結構」。重構是一種有紀律的、經過訓練的、有條不紊的程式整理方法,可以將整理過程中不小心引入錯誤的機率降到最低。本質上說,重構就是「在程式碼寫好之後改進他的設計」。p. xvi

這是一本介紹「重構」技術的書籍,如果你想認識並瞭解這門技術,「重構:改善既有程式的設計」絕對是聖經本。一開始作者以案例方式帶領讀者進入重構的過程,第一章藉由案例認識重構的方式與準則。接著第二章說明重構的基礎知識,包括何謂重構、為何需要重構、何時應該重構...等基本問題,再來第四章用「程式的壞味道」來判斷何時應該開始重構、何時應該停止重構,第四章則是說明重要的觀念:重構的前提必須是擁有一個可靠的測試環境。大致上來說,如果你閱讀完前四章,那你對於重構技術已經有完整的認識了。


Martin Fowler等著,侯捷、熊節合譯,重構:改善既有程式的設計,台北:台灣培生教育出版:碁峰資訊發行,2008。
譯自:Refactoring: Improving the Design of Existing Code,作者群:Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts。

接著第5章至第12章則是作者在工作中整理出來的「重構名錄(catalog of refactorings)」,這些重構名錄是這本書的核心,利用這些重構名錄所記載的重構方法,我們可以很方便的改善既有程式的設計。這些重構方法如下(也就是書的目錄一部份),這些方法可分成7大類總共72個:
  • 重新組織你的函式 (Composing Methods)
    1. Extract Method (提煉函式)
    2. Inline Method (將函式內聯化)
    3. Inline Temp (將暫時變數內聯化)
    4. Replace Temp with Query (以查詢取代變數)
    5. Introduce Explaining Variable (引入解釋性變數)
    6. Split Temporary Variable (剖解暫時變數)
    7. Remove Assignments to Parameters (移除對參數的賦值動作)
    8. Replace Method with Method Object (以函式物件取代函式)
    9. Substitute Algorithm (替換你的演算法)
  • 在物件之間移動特性 (Moving Features Between Objects)
    1. Move Method (搬移函式)
    2. Move Field (搬移欄位)
    3. Extract Class (提煉類別)
    4. Inline Class (將類別內聯化)
    5. Hide Delegate (隱藏「委託關係」)
    6. Remove Middle Man (移除中間人)
    7. Introduce Foreign Method (引入外加函式)
    8. Introduce Local Extension (引入區域性擴展)
  • 重新組織你的資料 (Organizing Data)
    1. Self Encapsulate Field (自我封裝欄位)
    2. Replace Data Value with Object (以物件取代資料值)
    3. Change Value to Reference (將實質物件改為引用物件)
    4. Change Reference to Value (將引用物件改為實質物件)
    5. Replace Array with Object (以物件取代陣列)
    6. Duplicate Observed Data (複製「被監視資料」)
    7. Change Unidirectional Association to Bidirectional (將單向關聯改為雙向)
    8. Change Bidirectional Association to Unidirectional (將雙向關聯改為單向)
    9. Replace Magic Number with Symbolic Constant (以符號常數/字面常數 取代魔術數字)
    10. Encapsulate Field (封裝欄位)
    11. Encapsulate Collection (封裝群集)
    12. Replace Record with Data Class (以資料類別取代記錄)
    13. Replace Type Code with Class (以類別取代型別代碼)
    14. Replace Type Code with Subclasses (以子類別取代型別代碼)
    15. Replace Type Code with State/Strategy (以 State/Strategy 取代型別代碼)
    16. Replace Subclass with Fields (以欄位取代子類別)
  • 簡化條件句 (Simplifying Conditional Expressions)
    1. Decompose Conditional (分解條件式)
    2. Consolidate Conditional Expression (合併條件式)
    3. Consolidate Duplicate Conditional Fragments (合併重複的條件片段)
    4. Remove Control Flag (移除控制旗標)
    5. Replace Nested Conditional with Guard Clauses (以衛述句取代巢狀條件式)
    6. Replace Conditional with Polymorphism. (以多型取代條件式)
    7. Introduce Null Object (引入Null物件)
    8. Introduce Assertion (引入斷言)
  • 簡化函式呼叫 (Making Method Calls Simpler)
    1. Rename Method (重新命名函式)
    2. Add Parameter (添加參數)
    3. Remove Parameter (移除參數)
    4. Separate Query from Modifier (以查詢函式和修改函式分離)
    5. Parameterize Method (令函式攜帶參數)
    6. Replace Parameter with Explicit Methods (以明確函式取代參數)
    7. Preserve Whole Object (保持物件完整)
    8. Replace Parameter with Method (以函式取代參數)
    9. Introduce Parameter Object (引入參數物件)
    10. Remove Setting Method (移除設值函式)
    11. Hide Method (隱藏某個函式)
    12. Replace Constructor with Factory Method (以工廠函式取代建構式)
    13. Encapsulate Downcast (封裝「向下轉型」動作)
    14. Replace Error Code with Exception (以異常取代錯誤碼)
    15. Replace Exception with Test (以測試取代異常)
  • 處理繼承關係 (Dealing with Generalization)
    1. Pull Up Field (欄位上移)
    2. Pull Up Method (函式上移)
    3. Pull Up Constructor Body (建構式本體上移)
    4. Push Down Method (函式下移)
    5. Push Down Field (欄位下移)
    6. Extract Subclass (提煉子類別)
    7. Extract Superclass (提煉超類別)
    8. Extract Interface (提煉介面)
    9. Collapse Hierarchy (摺疊繼承體系)
    10. Form Template Method (塑造模板函式)
    11. Replace Inheritance with Delegation (以委託取代繼承)
    12. Replace Delegation with Inheritance (以繼承取代委託)
  • 大型重構 (Big Refactorings)
    1. Tease Apart Inheritance (梳理並分解繼承體系)
    2. Convert Procedural Design to Objects (將程序式設計轉化為物件設計)
    3. Separate Domain from Presentation (將領域和 表述/顯示 分離)
    4. Extract Hierarchy (提煉繼承體系)
註:侯捷先生在他的網站上有公布書中第一章至第六章的內容,有興趣的讀者可以先上網試讀!網站是http://jjhou.boolan.com/jjtbooks-refactoring.htm
###

2013年3月13日 星期三

徹底研究Python:談關鍵字(keywords)

徹底研究Python:談關鍵字(keywords)。

討論一下Python程式語言的關鍵字,所謂關鍵字指的是程式語言本身保留的識別名稱(Identifiers ),我們不能使用這些關鍵字作為程式的識別名稱,例如變數名稱、函式名稱或類別名稱等等。

Pythony總共有31個關鍵字,可以匯入keyword模組找出有哪些關鍵字,存取keyword.kwlist就會列出關鍵字的串列資料。Python的關鍵字如下:
  1. and
  2. as
  3. assert
  4. break
  5. class
  6. continue
  7. def
  8. del
  9. elif
  10. else
  11. except
  12. exec
  13. finally
  14. for
  15. from
  16. global
  17. if
  18. import
  19. in
  20. is
  21. lambda
  22. not
  23. or
  24. pass
  25. print
  26. raise
  27. return
  28. try
  29. while
  30. with
  31. yield
注意到print在Python 2是關鍵字,然而在Python 3的版本則是內建函式。

###

2013年3月8日 星期五

徹底研究Python:談型別(type)

徹底研究Python:談型別(type)。

Python內建型別總共28個,這些型別本身也是一種物件(在Python程式語言裡面所有的都是物件),稱為型別物件(type objects),使用type()函式可以知道物件的型別是什麼型別物件。

在Python的標準程式庫中,types模組定義部分型別的型別名稱,我們可以使用這些型別名稱取得型別物件,像是types.IntType就是取的int型別物件,注意到並不是所有的型別物件都有定義名稱,只有16個型別有定義名稱,整理如下表。

內建型別物件型別名稱
basestring
boolBooleanType
bufferBufferType
bytearray
bytes (bytes型別是Python 3.0才正式新增, 2.x等於str)
classmethod
complexComplexType
dictDictType, DictionaryType 
enumerate
fileFileType
floatFloatType
frozenset
intIntType
listListType
longLongType
memoryview
objectObjectType
property
reversed
set
sliceSliceType
staticmethod
strStringType
super
tupleTupleType
typeTypeType
unicodeUnicodeType
xrangeXRangeType

另外在內建常數的部分,types模組定義定義3個型別名稱,分別是:

內建常數型別名稱
NoneNoneType
NotImplementedNotImplementedType
EllipsisEllipsisType


剩下的型別名稱則是常用的物件,因此types模組定義這些物件的型別名稱,總共17個
  1. BuiltinFunctionType
  2. BuiltinMethodType
  3. ClassType
  4. CodeType
  5. DictProxyType
  6. FrameType
  7. FunctionType
  8. GeneratorType
  9. GetSetDescriptorType
  10. InstanceType
  11. LambdaType
  12. MemberDescriptorType
  13. MethodType
  14. ModuleType
  15. StringTypes
  16. TracebackType
  17. UnboundMethodType

列出內建型別的程式碼
if __name__ == "__main__":
    import types
    for item in dir(__builtins__):
        attr = getattr(__builtins__, item)
        if type(attr) is types.TypeType and \
           not issubclass(attr, BaseException):
            print attr

###

2013年3月6日 星期三

徹底研究Python:談內建(built-in)物件

徹底研究Python:談內建(built-in)物件。

啟動Python interpreter之後,就已經可以使用一些東西,這些東西稱為Python的內建(built-in)物件,是Python程式語言本身的一部分(即Python的核心)。我們可以使用「__builtin__」模組存取這些內建物件,使用len(dir(__builtin__))或len(__builtins__)指令可以發現總共有144個,這些內建物件可以分成下列4類:
  • 內建常數,共11個
    • Python程式語言本身內建,共6個
      1. False
      2. True
      3. None
      4. NotImplemented
      5. Ellipsis
      6. __debug__
    • 因Python自動匯入site模組,額外加入常數至內建名稱空間之中,共5個
      1. quit
      2. exit
      3. copyritht
      4. license
      5. credits
  • 內建型別,共28個
    1. basestring
    2. bool
    3. buffer
    4. bytearray
    5. bytes (bytes型別是Python 3.0才正式新增,2.x版的bytes等於str型別)
    6. classmethod
    7. complex
    8. dict
    9. enumerate
    10. file
    11. float
    12. frozenset
    13. int
    14. list
    15. long
    16. memoryview
    17. object
    18. property
    19. reversed
    20. set
    21. slice
    22. staticmethod
    23. str
    24. super
    25. tuple
    26. type
    27. unicode
    28. xrange
  • 內建函式,共53個
    1. __import__
    2. abs
    3. all
    4. any
    5. apply
    6. bin
    7. callable
    8. chr
    9. cmp
    10. coerce
    11. compile
    12. delattr
    13. dir
    14. divmod
    15. eval
    16. execfile
    17. filter
    18. format
    19. getattr
    20. globals
    21. hasattr
    22. hash
    23. help:因Python自動匯入site模組,額外加入至內建函式中
    24. hex
    25. id
    26. input
    27. intern
    28. isinstance
    29. issubclass
    30. iter
    31. len
    32. locals
    33. map
    34. max
    35. min
    36. next
    37. oct
    38. open
    39. ord
    40. pow
    41. print
    42. range
    43. raw_input
    44. reduce
    45. reload
    46. repr
    47. round
    48. setattr
    49. sorted
    50. sum
    51. unichr
    52. vars
    53. zip
  • 內建例外,共48個
    1. ArithmeticError
    2. AssertionError
    3. AttributeError
    4. BaseException
    5. BufferError
    6. BytesWarning
    7. DeprecationWarning
    8. EOFError
    9. EnvironmentError
    10. Exception
    11. FloatingPointError
    12. FutureWarning
    13. GeneratorExit
    14. IOError
    15. ImportError
    16. ImportWarning
    17. IndentationError
    18. IndexError
    19. KeyError
    20. KeyboardInterrupt
    21. LookupError
    22. MemoryError
    23. NameError
    24. NotImplementedError
    25. OSError
    26. OverflowError
    27. PendingDeprecationWarning
    28. ReferenceError
    29. RuntimeError
    30. RuntimeWarning
    31. StandardError
    32. StopIteration
    33. SyntaxError
    34. SyntaxWarning
    35. SystemError
    36. SystemExit
    37. TabError
    38. TypeError
    39. UnboundLocalError
    40. UnicodeDecodeError
    41. UnicodeEncodeError
    42. UnicodeError
    43. UnicodeTranslateError
    44. UnicodeWarning
    45. UserWarning
    46. ValueError
    47. Warning
    48. ZeroDivisionError
上述數量加起來共140個,剩下4個是模組屬性(attribute):
  • _:上一次最新輸出的結果(last printed expression)
  • __doc__:文件字串
  • __name__:名稱
  • __package__:套件

###

熱門文章