通用 Python 常見問題解答

基本資訊

什麼是 Python?

Python 是一種解釋型的、互動式的、面向物件的程式語言。它包含模組、異常、動態型別、非常高階的動態資料型別和類。它支援面向物件程式設計之外的多種程式設計正規化,例如過程式和函數語言程式設計。Python 將強大的功能與非常清晰的語法相結合。它具有許多系統呼叫和庫的介面,以及各種視窗系統,並且可以在 C 或 C++ 中擴充套件。它也可以用作需要可程式設計介面的應用程式的擴充套件語言。最後,Python 是可移植的:它在許多 Unix 變體(包括 Linux 和 macOS)以及 Windows 上執行。

要了解更多資訊,請從Python 教程開始。Python 初學者指南連結到其他入門教程和學習 Python 的資源。

什麼是 Python 軟體基金會?

Python 軟體基金會是一個獨立的非營利組織,擁有 Python 2.1 及更高版本的版權。PSF 的使命是推進與 Python 程式語言相關的開源技術,並宣傳 Python 的使用。PSF 的主頁位於 https://python.club.tw/psf/

向 PSF 的捐款在美國是免稅的。如果您使用 Python 並發現它有幫助,請透過PSF 捐贈頁面進行捐款。

Python 最初是如何建立的?

這是 Guido van Rossum 撰寫的關於這一切如何開始的非常簡短的總結

我在 CWI 的 ABC 小組中擁有實現解釋型語言的豐富經驗,並且透過與該小組合作,我學到了很多關於語言設計的知識。這是許多 Python 功能的起源,包括使用縮排進行語句分組以及包含非常高階的資料型別(儘管 Python 中的細節都不同)。

我對 ABC 語言有一些不滿,但也喜歡它的許多功能。不可能擴充套件 ABC 語言(或其實現)來解決我的抱怨——事實上,它缺乏可擴充套件性是它最大的問題之一。我有一些使用 Modula-2+ 的經驗,並與 Modula-3 的設計者進行了交談,並閱讀了 Modula-3 報告。Modula-3 是用於異常的語法和語義以及其他一些 Python 功能的起源。

我當時在 CWI 的 Amoeba 分散式作業系統小組工作。我們需要一種比編寫 C 程式或 Bourne shell 指令碼更好的方法來進行系統管理,因為 Amoeba 有自己的系統呼叫介面,而該介面不容易從 Bourne shell 訪問。我在 Amoeba 中的錯誤處理經驗使我敏銳地意識到異常作為一種程式語言功能的重要性。

我想到一種語法類似於 ABC 但可以訪問 Amoeba 系統呼叫的指令碼語言可以滿足這一需求。我意識到編寫一種特定於 Amoeba 的語言是愚蠢的,所以我決定我需要一種普遍可擴充套件的語言。

在 1989 年的聖誕節假期期間,我有很多空閒時間,所以我決定試一試。在接下來的一年中,雖然我仍然主要在自己的時間裡進行工作,但 Python 在 Amoeba 專案中的使用越來越成功,同事的反饋使我添加了許多早期的改進。

在 1991 年 2 月,經過一年多的開發,我決定在 USENET 上釋出。其餘的都在 Misc/HISTORY 檔案中。

Python 有什麼用?

Python 是一種高階通用程式語言,可應用於許多不同型別的問題。

該語言帶有一個大型標準庫,涵蓋字串處理(正則表示式、Unicode、計算檔案之間的差異)、網際網路協議(HTTP、FTP、SMTP、XML-RPC、POP、IMAP)、軟體工程(單元測試、日誌記錄、效能分析、解析 Python 程式碼)和作業系統介面(系統呼叫、檔案系統、TCP/IP 套接字)等領域。檢視Python 標準庫的目錄,瞭解可用的內容。還提供了各種第三方擴充套件。請查閱Python 包索引以查詢您感興趣的軟體包。

Python 版本編號方案是如何工作的?

Python 版本編號為 “A.B.C” 或 “A.B”

  • A 是主版本號——只有在語言發生真正重大更改時才會遞增。

  • B 是次版本號——對於不太重要的更改會遞增。

  • C 是微版本號——對於每個錯誤修復版本都會遞增。

並非所有版本都是錯誤修復版本。在新功能版本釋出之前,會發布一系列開發版本,表示為 alpha、beta 或候選版本。Alpha 是早期版本,其中的介面尚未最終確定;在兩個 alpha 版本之間看到介面更改並不意外。Beta 更穩定,保留現有介面,但可能會新增新模組,而候選版本是凍結的,除了修復關鍵錯誤外,不會進行任何更改。

Alpha、beta 和候選版本具有附加的字尾

  • alpha 版本的字尾為 “aN”,其中 N 為某個較小的數字。

  • beta 版本的字尾為 “bN”,其中 N 為某個較小的數字。

  • 候選版本的字尾為 “rcN”,其中 N 為某個較小的數字。

換句話說,所有標記為 2.0aN 的版本都先於標記為 2.0bN 的版本,後者先於標記為 2.0rcN 的版本,而這些版本先於 2.0。

您可能還會發現帶有 “+” 字尾的版本號,例如 “2.2+”。這些是未釋出的版本,直接從 CPython 開發儲存庫構建。實際上,在釋出最終次要版本後,版本會遞增到下一個次要版本,該版本將成為 “a0” 版本,例如 “2.4a0”。

有關開發週期的更多資訊,請參閱開發者指南,並參閱 PEP 387 以瞭解有關 Python 向後相容性策略的更多資訊。另請參閱 sys.versionsys.hexversionsys.version_info 的文件。

如何獲取 Python 原始碼副本?

最新的 Python 原始碼分發始終可在 python.org 上獲取,網址為https://python.club.tw/downloads/。最新的開發原始碼可在https://github.com/python/cpython/上獲取。

原始碼分發是一個 gzipped tar 檔案,其中包含完整的 C 原始碼、Sphinx 格式的文件、Python 庫模組、示例程式以及一些有用的可自由分發的軟體。原始碼將在大多數 UNIX 平臺上開箱即用。

有關獲取原始碼和編譯原始碼的更多資訊,請參閱Python 開發者指南的入門部分

如何獲取關於 Python 的文件?

當前穩定版本的 Python 的標準文件可在 https://docs.python.club.tw/3/ 上獲取。PDF、純文字和可下載的 HTML 版本也可在 https://docs.python.club.tw/3/download.html 上獲取。

該文件使用 reStructuredText 編寫,並由 Sphinx 文件工具處理。文件的 reStructuredText 原始碼是 Python 原始碼分發的一部分。

我以前從未程式設計過。有 Python 教程嗎?

有很多可用的教程和書籍。標準文件包括Python 教程

請查閱初學者指南,查詢為 Python 初學者提供的相關資訊,包括教程列表。

是否有專門討論 Python 的新聞組或郵件列表?

有一個新聞組 comp.lang.python 和一個郵件列表 python-list。新聞組和郵件列表是相互閘道器的 —— 如果你能閱讀新聞,則無需訂閱郵件列表。comp.lang.python 的流量很高,每天收到數百條帖子,Usenet 閱讀器通常更能應對這種數量。

新軟體釋出和活動的公告可以在 comp.lang.python.announce 中找到,這是一個低流量的稽核列表,每天收到大約五條帖子。它作為 python-announce 郵件列表提供。

有關其他郵件列表和新聞組的更多資訊,請訪問 https://python.club.tw/community/lists/

如何獲取 Python 的 Beta 測試版本?

Alpha 和 Beta 版本可從 https://python.club.tw/downloads/ 獲取。所有版本都會在 comp.lang.python 和 comp.lang.python.announce 新聞組以及 Python 主頁 https://python.club.tw/ 上釋出;新聞的 RSS 源可用。

您還可以透過 Git 訪問 Python 的開發版本。有關詳細資訊,請參閱Python 開發者指南

如何提交 Python 的錯誤報告和補丁?

要報告錯誤或提交補丁,請使用 https://github.com/python/cpython/issues 上的問題跟蹤器。

有關 Python 如何開發的更多資訊,請查閱 Python 開發者指南

是否有關於 Python 的已發表文章可以作為參考?

最好引用您最喜歡的關於 Python 的書。

關於 Python 的第一篇文章寫於 1991 年,現在已經過時了。

Guido van Rossum 和 Jelke de Boer,“使用 Python 程式語言互動式測試遠端伺服器”,CWI Quarterly,第 4 卷,第 4 期(1991 年 12 月),阿姆斯特丹,第 283-303 頁。

是否有關於 Python 的書籍?

是的,有很多,而且還在不斷出版。有關列表,請參閱 python.org wiki https://wiki.python.org/moin/PythonBooks

您還可以在線上書店搜尋“Python”,並過濾掉 Monty Python 的引用;或者可以搜尋“Python”和“語言”。

www.python.org 在世界上的哪個位置?

Python 專案的基礎設施遍佈世界各地,由 Python 基礎設施團隊管理。詳細資訊請訪問此處

為什麼叫 Python?

當 Guido van Rossum 開始實現 Python 時,他還在閱讀 “Monty Python 的飛行馬戲團” 的已出版劇本,這是一個 1970 年代的 BBC 喜劇系列。Van Rossum 認為他需要一個簡短、獨特且略帶神秘感的名字,因此他決定將該語言命名為 Python。

我必須喜歡“Monty Python 的飛行馬戲團”嗎?

不,但這會有幫助。 :)

現實世界中的 Python

Python 有多穩定?

非常穩定。自 1991 年以來,大約每 6 到 18 個月就會發布新的穩定版本,這種情況似乎還會繼續。從 3.9 版開始,Python 將每 12 個月釋出一個新的功能版本(PEP 602)。

開發人員會發布舊版本的錯誤修復版本,因此現有版本的穩定性會逐漸提高。錯誤修復版本由版本號的第三個組成部分表示(例如 3.5.3、3.6.2),這些版本是為了穩定性而管理的;錯誤修復版本中僅包含已知問題的修復程式,並且保證介面在整個錯誤修復版本系列中保持不變。

最新的穩定版本始終可以在 Python 下載頁面上找到。Python 3.x 是推薦版本,並且受到大多數廣泛使用的庫的支援。Python 2.x 不再維護

有多少人正在使用 Python?

可能有數百萬使用者,儘管很難獲得確切的計數。

Python 可免費下載,因此沒有銷售資料,並且可以從許多不同的站點獲取,並與許多 Linux 發行版打包在一起,因此下載統計資料也不能說明全部情況。

comp.lang.python 新聞組非常活躍,但並非所有 Python 使用者都會在該組中發帖或甚至閱讀它。

是否有用 Python 完成的重大專案?

有關使用 Python 的專案列表,請參閱 https://python.club.tw/about/success。查閱 過去 Python 會議的記錄將揭示來自許多不同公司和組織的貢獻。

引人注目的 Python 專案包括 Mailman 郵件列表管理器Zope 應用程式伺服器。一些 Linux 發行版,最著名的是 Red Hat,已使用 Python 編寫了部分或全部安裝程式和系統管理軟體。內部使用 Python 的公司包括 Google、Yahoo 和 Lucasfilm Ltd.

未來 Python 有哪些新發展?

請參閱 https://peps.python.org/ 獲取 Python 增強提案 (PEP)。PEP 是描述 Python 建議的新功能的設計文件,提供了簡潔的技術規範和理由。查詢標題為“Python X.Y Release Schedule”的 PEP,其中 X.Y 是尚未公開發布的版本。

新的開發在 python-dev 郵件列表上討論。

提議對 Python 進行不相容的更改是否合理?

一般而言,不合理。世界各地已經有數百萬行 Python 程式碼,因此對語言的任何更改都會使現有程式中的一小部分失效,這必須受到譴責。即使您可以提供轉換程式,仍然存在更新所有文件的問題;已經有很多關於 Python 的書籍,我們不想一舉使它們全部失效。

如果必須更改某個功能,則必須提供逐步升級路徑。PEP 5 描述了在最大限度地減少使用者中斷的情況下引入向後不相容更改所遵循的過程。

Python 是初學者學習程式設計的好語言嗎?

是的。

讓學生從 Pascal、C 或 C++ 或 Java 的子集等過程式和靜態型別的語言開始仍然很常見。學生最好學習 Python 作為他們的第一語言。Python 具有非常簡單且一致的語法以及一個大型的標準庫,最重要的是,在初級程式設計課程中使用 Python 可以讓學生專注於重要的程式設計技能,例如問題分解和資料型別設計。透過 Python,學生可以快速瞭解迴圈和過程等基本概念。他們甚至可能在第一門課程中使用使用者定義的物件。

對於以前從未程式設計過的學生來說,使用靜態型別語言似乎不自然。它提出了學生必須掌握的額外複雜性,並減慢了課程的節奏。學生們正在努力學習像計算機一樣思考、分解問題、設計一致的介面和封裝資料。雖然從長遠來看學習使用靜態型別語言很重要,但這不一定是學生第一門程式設計課程中要解決的最佳主題。

Python 的許多其他方面使其成為一種很好的入門語言。與 Java 一樣,Python 擁有一個大型的標準庫,因此可以在課程的早期為學生分配 實際用途的程式設計專案。作業不限於標準四功能計算器和支票平衡程式。透過使用標準庫,學生可以在學習程式設計基礎知識時獲得從事實際應用程式的滿足感。使用標準庫還可以教學生有關程式碼重用的知識。PyGame 等第三方模組也有助於擴充套件學生的範圍。

Python 的互動式直譯器使學生能夠在程式設計時測試語言特性。他們可以在一個視窗中執行直譯器,同時在另一個視窗中輸入程式的原始碼。如果他們不記得列表的方法,他們可以執行類似這樣的操作

>>> L = []
>>> dir(L) 
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__',
'__dir__', '__doc__', '__eq__', '__format__', '__ge__',
'__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__',
'__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__',
'__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',
'__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__',
'__sizeof__', '__str__', '__subclasshook__', 'append', 'clear',
'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove',
'reverse', 'sort']
>>> [d for d in dir(L) if '__' not in d]
['append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

>>> help(L.append)
Help on built-in function append:

append(...)
    L.append(object) -> None -- append object to end

>>> L.append(1)
>>> L
[1]

使用直譯器,文件在學生程式設計時永遠不會遙遠。

Python 也有一些優秀的整合開發環境 (IDE)。IDLE 是一個跨平臺的 Python IDE,它使用 Tkinter 用 Python 編寫。Emacs 使用者會很高興知道 Emacs 有一個非常好的 Python 模式。所有這些程式設計環境都提供語法高亮、自動縮排,以及在編碼時訪問互動式直譯器的功能。請參考Python wiki,獲取完整的 Python 編輯環境列表。

如果您想討論 Python 在教育中的應用,您可能有興趣加入edu-sig 郵件列表