### 1. 簡介
這份參考手冊講述Python編程語言。它并不打算作為一個教程。
除了語法和詞法分析,在盡可能精確的同時,對所有內容我選擇使用英語而不是形式化的說明。這應該使得這份文檔對一般讀者更容易理解, 但將導致某些地方意義不明確。因此, 如果你來自火星并試圖僅僅通過這份文檔重新實現 Python, 你可能不得不猜測一些東西, 其實事實上你將可能最終實現一種完全不同的語言。另一方面, 如果你正在使用 Python 并想知道該語言某一方面明確的規則, 你一定能在這里找到它們。如果你想要看該語言更正式的定義, 或許你可以自愿獻出你的時間來寫一份 — 那還不如用來發明一臺克隆機器 :-)。
加入太多的實現細節到語言參考文檔里是危險的 — 實現可能改變,同一語言的其它實現可能以不同的方法工作。另一方面,CPython是當前唯一一個廣泛使用的Python實現(雖然存在其它實現),它的某些怪異的地方有時候是值得提及的,尤其是強加了額外限制的實現。因此,你將會發現散布在整個文檔中的簡短的“實現說明”。
每一種Python實現都伴隨著若干內建和標準模塊。這些文檔位于[*Python標準庫*](#)。一些內建的模塊以重要的方式與語言的定義交互時會有所提及。
### 1.1. 各種實現
盡管已有一個目前最為流行的 Python 實現, 但還是有一些其它的實現, 它們對不同的用戶有著特別的吸引力。
已知的實現包括:
CPython這是Python初始的以及維護得最好的實現,使用C編寫。新的語言特性一般會最先在這里出現。Jython用Java 實現的Python。這個實現可以作為腳本語言在Java應用中使用,或者可以用來利用Java類庫來創建應用。它也經常被用來為Java庫創建測試。更多的信息可以在[Jython網站](http://www.jython.org/)上找到。用于.NET的Python這個實現實際上使用了CPython實現, 但是是一個.NET托管的應用程序,并使得.NET類庫可以使用。它由Brian Lloyd創建。更多信息請參閱[.NET版Python的主頁](http://pythonnet.sourceforge.net)。IronPython.NET 版的另外一種Python。與Python.NET不同,這是一個完整的Python實現,它產生IL并且直接把Python代碼編譯成.NET程序集。它由Jython 的初始創建者Jim Hugunin 創建。更多信息請參閱[IronPython 網站](http://pythonnet.sourceforge.net)。PyPy完全用Python 寫的一種Python 實現。它支持一些在其它實現中沒有的高級特性,例如無棧支持和JIT(即時)編譯器。該項目的目標之一是,鼓勵通過使得改變解釋器更簡單來試驗語言本身(因為它是用 Python 寫的)。更多信息可以訪問 [PyPy 項目的主頁](http://pypy.org/)。
這里的每一個實現都會與這份手冊里講述的語言在某些方面有所不同, 或者引入超出標準Python 文檔內容的特殊信息。請參閱特定實現的文檔以確定關于你正在使用的特定實現,你還需要了解些什么。
### 1.2. 語法符號
詞法分析和語法的描述使用一種修改過的BNF語法符號。它使用以下風格的定義:
~~~
name ::= lc_letter (lc_letter | "_")*
lc_letter ::= "a"..."z"
~~~
第一行是說name是一個lc_letter,后面跟著一個零個或多個lc_letter和下劃線組成的序列。接著,一個lc_letter是'a'到'z'之間任意一個單個字符。(這個規則事實上就是該文檔中詞法和語法規則中的名稱的定義方式。)
每條規則以一個名字(這條規則定義的名字)和::=開始。豎線(|)用于分隔可選的項;它是該語法符號中綁定性最弱的操作符。星號(*)表示前面項目的零個或多個重復;類似地, 加號(+)表示一個或多個重復, 而方括號([])表示里面的內容出現零次或一次(換句話說, 方括號中的內容是可選的)。*和+操作符的綁定性最強;圓括號用于分組。字符串字面值由引號引起來。空格只對分隔標識符有意義。規則通常包含在單獨的一行中;具有許多可選項的規則可能會在第一行之后,每一行以一個豎線開始。
在詞法定義中(如上面的例子),還使用了兩個額外的約定:三個點號分隔的兩個字符表示給出的范圍內(包括這兩個字符)的任何一個單個ASCII字符。尖括號(<...>)中的內容表示不是定義的符號的正式描述;例如,如果需要這可以用來描述‘控制字符’的概念。
雖然使用的語法符號幾乎完全一樣,詞法和語法定義之間的含義有一個巨大的差異:詞法定義工作在輸入的單個字符上,而語法定義工作在由詞法分析生成的標識符流上。下一章(“詞法分析”)中使用的所有BNF都是詞法定義;再往后的幾章是語法定義。
- Python 2 教程
- 1. 吊吊你的胃口
- 2. Python 解釋器
- 3. Python簡介
- 4. 控制流
- 5. 數據結構
- 6. 模塊
- 7. 輸入和輸出
- 8. 錯誤和異常
- 9. 類
- 10. 標準庫概覽
- 11. 標準庫概覽 — 第II部分
- 12.現在怎么辦?
- 13. 交互式輸入的編輯和歷史記錄
- 14. 浮點數運算:問題和局限
- Python 2 標準庫
- 1. 引言
- 2. 內建函數
- 3. 不太重要的內建函數
- 4. 內建的常量
- 5. 內建的類型
- 6. 內建的異常
- 7. String Services
- 8. Data Types
- 9. Numeric and Mathematical Modules
- 10. File and Directory Access
- 11. Data Persistence
- 13. File Formats
- 14. Cryptographic Services
- 15. Generic Operating System Services
- 16. Optional Operating System Services
- 17. Interprocess Communication and Networking
- 18. Internet Data Handling
- 20. Internet Protocols and Support
- 26. Debugging and Profiling
- 28. Python Runtime Services
- Python 2 語言參考
- 1. 簡介
- 2. 詞法分析
- 3. 數據模型
- 4. 執行模型
- 5. 表達式
- 6. 簡單語句
- 7. 復合語句
- 8. 頂層的組件
- 9. 完整的語法規范
- Python 3 教程
- 1. 引言
- 2. Python 解釋器
- 3. Python簡介
- 4. 控制流
- 5. 數據結構
- 6. 模塊
- 7. 輸入和輸出
- 8. 錯誤和異常
- 9. 類
- 10. 標準庫概覽
- 11. 標準庫概覽 — 第II部分
- 12.現在怎么辦?
- 13. 交互式輸入的編輯和歷史記錄
- 14. 浮點數運算:問題和局限