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 feed。

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

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

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

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

有沒有關於 Python 的已發表文章可供我參考?

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

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

Guido van Rossum 和 Jelke de Boer,“使用 Python 程式語言互動式測試遠端伺服器”,CWI 季刊,第 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 時,他也在閱讀 20 世紀 70 年代 BBC 喜劇系列 “蒙提·派森的飛行馬戲團” 的已發表劇本。Van Rossum 認為他需要一個簡短、獨特且略帶神秘的名字,所以他決定將該語言命名為 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 完成的重大專案?

請參閱 https://python.club.tw/about/success,瞭解使用 Python 的專案列表。查閱 過去的 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 釋出時間表”的 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 郵件列表