Python常見問題?

一般信息?

什么是 Python??

Python 是一種解釋型、交互式、面向?qū)ο蟮木幊陶Z言。 它包含了模塊、異常、動態(tài)類型、高層級動態(tài)數(shù)據(jù)類型以及類等特性。 在面向?qū)ο缶幊桃酝馑€支持多種編程范式,例如過程式和函數(shù)式編程等。 Python 結合了超強的功能和極清晰的語法。 它帶有許多系統(tǒng)調(diào)用和庫以及多種窗口系統(tǒng)的接口,并且能用 C 或 C++ 來進行擴展。 它還可用作需要可編程接口的應用程序的擴展語言。 最后,Python 非常易于移植:它可以在包括 Linux 和 macOS 在內(nèi)的許多 Unix 變種以及 Windows 上運行。

要了解更多詳情,請先查看 Python 教程Python 新手指南 提供了學習 Python 的其他入門教程及資源的鏈接。

什么是 Python 軟件基金會??

Python 軟件基金會(Python Software Foundation,簡稱 PSF)是一個獨立的非盈利組織,它擁有 Python 2.1 及以上各版本的版權。 PSF 的使命是推進與 Python 編程語言相關的開源技術,并推廣 Python 的使用。 PSF 的主頁是 https://www.python.org/psf/

向 PSF 提供捐助在美國是免稅的。 如果你在使用 Python 并且感覺它對你很有幫助,可以通過 PSF 捐助頁 進行捐助。

創(chuàng)造 Python 的最初理由是什么??

以下是有關最初緣起的一份 非常 簡短的摘要,由 Guido van Rossum 本人撰寫:

我在 CWI 的 ABC 部門時在實現(xiàn)解釋型語言方面積累了豐富經(jīng)驗,通過與這個部門成員的協(xié)同工作,我學到了大量有關語言設計的知識。 這是許多 Python 特性的最初來源,包括使用縮進來組織語句以及包含非常高層級的數(shù)據(jù)結構(雖然在 Python 中具體的實現(xiàn)細節(jié)完全不同)。

我對 ABC 語言有過許多抱怨,但同時也很喜歡它的許多特性。 沒有可能通過擴展 ABC 語言(或它的實現(xiàn))來彌補我的不滿 —— 實際上缺乏可擴展性就是它最大的問題之一。 我也有一些使用 Modula-2+ 的經(jīng)驗,并曾與 Modula-3 的設計者進行交流,還閱讀了 Modula-3 的報告。 Modula-3 是 Python 中異常機制所用語法和語義,以及其他一些語言特性的最初來源。

我還曾在 CWI 的 Amoeba 分布式操作系統(tǒng)部門工作。 當時我們需要有一種比編寫 C 程序或 Bash 腳本更好的方式來進行系統(tǒng)管理,因為 Amoeba 有它自己的系統(tǒng)調(diào)用接口,并且無法方便地通過 Bash 來訪問。 我在 Amoeba 中處理錯誤的經(jīng)驗令我深刻地意識到異常處理在編程語言特性當中的重要地位。

我發(fā)現(xiàn),某種具有 ABC 式的語法而又能訪問 Amoeba 系統(tǒng)調(diào)用的腳本語言將可滿足需求。 我意識到編寫一種 Amoeba 專屬的語言是愚蠢的,所以我決定編寫一種具有全面可擴展性的語言。

在 1989 年的圣誕假期中,我手頭的時間非常充裕,因此我決定開始嘗試一下。 在接下來的一年里,雖然我仍然主要用我的業(yè)余時間來做這件事,但 Python 在 Amoeba 項目中的使用獲得了很大的成功,來自同事的反饋讓我得以增加了許多早期的改進。

到 1991 年 2 月,經(jīng)過一年多的開發(fā),我決定將其發(fā)布到 USENET。 之后的事情就都可以在 Misc/HISTORY 文件里面看了。

Python 適合做什么??

Python 是一種高層級的多用途編程語言,可用于解決許多不同門類的問題。

該語言自帶一個龐大的標準庫,涵蓋了許多編程領域,例如字符串處理(正則表達式、Unicode、比較文件間的差異等),互聯(lián)網(wǎng)協(xié)議(HTTP, FTP, SMTP, XML-RPC, POP, IMAP, CGI 編程等),軟件工程(單元測試、日志記錄、性能分析、Python 代碼解析等)以及操作系統(tǒng)接口(系統(tǒng)調(diào)用、文件系統(tǒng)、TCP/IP 套接字等)。 請查看 Python 標準庫 目錄頁以概覽所有可用內(nèi)容。 此外還有大量第三方擴展可供使用。 請訪問 Python 軟件包索引 來查找你感興趣的軟件包。

Python 版本的編號形式是怎樣的??

Python 版本的編號形式是 A.B.C 或 A.B。 A 稱為大版本號 —— 它僅在對語言特性進行非常重大改變時才會遞增。 B 稱為小版本號,它會在語言特性發(fā)生較小改變時遞增。 C 稱為微版本號 —— 它會在每次發(fā)布問題修正時遞增。 請參閱 PEP 6 了解有關問題修正發(fā)布版的詳情。

發(fā)布版本并非都是問題修正版本。 在新的主要發(fā)布版本開發(fā)過程中,還會發(fā)布一系列的開發(fā)版,它們以 alpha (a), beta (b) 或 release candidate (rc) 來標示。 其中 alpha 版是早期發(fā)布的測試版,它的接口并未最終確定;在兩個 alpha 發(fā)布版本間出現(xiàn)接口的改變并不意外。 而 beta 版更為穩(wěn)定,它會保留現(xiàn)有的接口,但也可能增加新的模塊,release candidate 版則會保持凍結狀態(tài)不會再進行改變,除非有重大問題需要修正。

以上 alpha, beta 和 release candidate 版本會附加一個后綴。 用于 alpha 版本的后綴是帶有一個小數(shù)字 N 的“aN”,beta 版本的后綴是帶有一個小數(shù)字 N 的“bN”,而 release candidate 版本的后綴是帶有一個小數(shù)字 N 的“rcN”。 換句話說,所有標記為 2.0aN 的版本都早于標記為 2.0bN 的版本,后者又都早于標記為 2.0rcN 的版本,而 它們 全都早于 2.0。

你還可能看到帶有“+”后綴的版本號,例如“2.2+”。 這表示未發(fā)布版本,直接基于 CPython 開發(fā)代碼倉庫構建。 在實際操作中,當一個小版本最終發(fā)布后,未發(fā)布版本號會遞增到下一個小版本號,成為“a0”版本,例如“2.4a0”。

另請參閱 sys.version, sys.hexversion 以及 sys.version_info 的文檔。

我應如何獲取一份 Python 源代碼的副本??

最新的 Python 發(fā)布版源代碼總能從 python.org 獲取,下載頁鏈接為 https://www.python.org/downloads/。 最新的開發(fā)版源代碼可以在 https://github.com/python/cpython/ 獲取。

發(fā)布版源代碼是一個以 gzip 壓縮的 tar 文件,其中包含完整的 C 源代碼、Sphinx 格式的文檔、Python 庫模塊、示例程序以及一些有用的自由分發(fā)軟件。 該源代碼將可在大多數(shù) UNIX 類平臺上直接編譯并運行。

請參閱 Python 開發(fā)者指南的初步上手部分 了解有關獲取源代碼并進行編譯的更多信息。

我應如何獲取 Python 的文檔??

當前的 Python 穩(wěn)定版本的標準文檔可在 https://docs.python.org/3/ 查看。 也可在 python doc download 獲取PDF、純文本以及可下載的 HTML 版本。

文檔以 reStructuredText 格式撰寫,并使用 Sphinx 文檔工具 生成。 文檔的 reStructuredText 源文件是 Python 源代碼發(fā)布版的一部分。

我之前從未接觸過編程。 哪里有 Python 的教程??

有許多可選擇的教程和書籍。 標準文檔中也包含有 Python 教程。

請參閱 新手指南 以獲取針對 Python 編程初學者的信息,包括教程的清單。

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

有一個新聞組 comp.lang.python 和一個郵件列表 python-list。 新聞組和郵件列表是彼此互通的 —— 如果你可以閱讀新聞就不必再訂閱郵件列表。 comp.lang.python 的流量很大,每天會收到數(shù)以百計的發(fā)帖,Usenet 使用者通常更擅長處理這樣大的流量。

有關新軟件發(fā)布和活動的公告可以在 comp.lang.python.announce 中找到,這是個嚴格管理的低流量列表,每天會收到五個左右的發(fā)帖。 可以在 Python 公告郵件列表 頁面進行訂閱。

有關其他郵件列表和新聞組的更多信息可以在 https://www.python.org/community/lists/ 找到。

我應如何獲取 Python 的公開測試版本??

可以從 https://www.python.org/downloads/ 下載 alpha 和 beta 發(fā)布版。 所有發(fā)布版都會在 comp.lang.python 和 comp.lang.python.announce 新聞組以及 Python 主頁 https://www.python.org/ 上進行公告;并會推送到 RSS 新聞源。

你還可以通過 Git 訪問 Python 的開發(fā)版。 請參閱 Python 開發(fā)者指南 了解詳情。

我應如何為 Python 提交錯誤報告和補????

To report a bug or submit a patch, use the issue tracker at https://github.com/python/cpython/issues.

有關 Python 開發(fā)流程的更多信息,請參閱 Python 開發(fā)者指南

是否有任何公開發(fā)表的 Python 相關文章可以供我參考引用??

可能作為參考文獻的最好方式還是引用你喜歡的 Python 相關書籍。

第一篇有關 Python 的文章寫于 1991 年,現(xiàn)在其內(nèi)容已經(jīng)相當過時了。

Guido van Rossum 與 Jelke de Boer, "使用 Python 編程語言交互式地測試遠程服務器", CWI 季刊, 第 4 卷, 第 4 期 (1991 年 12 月), 阿姆斯特丹, 第 283--303 頁。

是否有任何 Python 相關的書籍??

是的,相關的書籍很多,還有更多即將發(fā)行。 請訪問 python.org 的 wiki 頁面 https://wiki.python.org/moin/PythonBooks 獲取一份清單。

你也可以到各大在線書店搜索 "Python" 并過濾掉對 Monty Python 的引用;或者也可以搜索 "Python" 加 "language"。

www.python.org 具體位于世界上的哪個地點??

Python 項目的基礎架構分布于世界各地并由 Python 基礎架構團隊負責管理。 詳情請訪問 這里。

為何命名為 Python??

在著手編寫 Python 實現(xiàn)的時候,Guido van Rossum 同時還閱讀了剛出版的 "Monty Python 的飛行馬戲團" 劇本,這是一部自 1970 年代開始播出的 BBC 系列喜劇。 Van Rossum 覺得他需要選擇一個簡短、獨特而又略顯神秘的名字,于是他決定將這個新語言命名為 Python。

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

不必,但這對學習會有幫助。 :)

現(xiàn)實世界中的 Python?

Python 有多穩(wěn)定??

非常穩(wěn)定。 自 1991 年起大約每隔 6 到 18 個月就會推出新的穩(wěn)定發(fā)布版,這種狀態(tài)看來還還持續(xù)。 從 3.9 版開始,Python 將會每隔 12 個月推出一個新的主要發(fā)布版 (PEP 602)。

開發(fā)者也會推出舊版本的“問題修正”發(fā)布版,因此現(xiàn)有發(fā)布版的穩(wěn)定性還會逐步提升。 問題修正發(fā)布版會以版本號第三部分的數(shù)字來標示(例如 3.5.3, 3.6.2),用于穩(wěn)定性的管理;只有對已知問題的修正會包含在問題修正發(fā)布版中,同一系列的問題修正發(fā)布版中的接口確定將會始終保持一致。

The latest stable releases can always be found on the Python download page. There are two production-ready versions of Python: 2.x and 3.x. The recommended version is 3.x, which is supported by most widely used libraries. Although 2.x is still widely used, it is not maintained anymore.

有多少人在使用 Python??

使用者應該數(shù)以百萬計,但很難獲得一個精確的數(shù)字。

Python 可以免費下載,因此并不存在銷量數(shù)據(jù),此外它也可以從許多不同網(wǎng)站獲取,并且包含于許多 Linux 發(fā)行版之中,因此下載量統(tǒng)計同樣無法完全說明問題。

comp.lang.python 新聞組非?;钴S,但不是所有 Python 用戶都會在新聞組發(fā)帖,許多人甚至不會閱讀新聞組。

有哪些重要的項目是用 Python 開發(fā)的??

請訪問 https://www.python.org/about/success 查看使用了 Python 的項目列表。 閱覽 歷次 Python 會議 的日程紀要可以看到許多不同公司和組織所做的貢獻。

高水準的 Python 項目包括 Mailman 郵件列表管理器Zope 應用服務器。 多個 Linux 發(fā)行版,其中最著名的有 Red Hat 均已使用 Python 來編寫部分或全部的安裝程序和系統(tǒng)管理軟件。 在內(nèi)部使用 Python 的大公司包括了 Google, Yahoo 以及 Lucasfilm 等。

在未來可以期待 Python 將有什么新進展??

See https://peps.python.org/ for the Python Enhancement Proposals (PEPs). PEPs are design documents describing a suggested new feature for Python, providing a concise technical specification and a rationale. Look for a PEP titled "Python X.Y Release Schedule", where X.Y is a version that hasn't been publicly released yet.

新版本的開發(fā)會在 python-dev 郵件列表 中進行討論。

提議對 Python 加入不兼容的更改是否合理??

通常來說是不合理的。 世界上已存在的 Python 代碼數(shù)以億計,因此,任何對該語言的更改即便僅會使得現(xiàn)有程序中極少的一部分失效也是難以令人接受的。 就算你可以提供一個轉換程序,也仍然存在需要更新全部文檔的問題;另外還有大量已出版的 Python 書籍,我們不希望讓它們在一瞬間全部變成廢紙。

如果必須更改某個特性,則應該提供漸進式的升級路徑。 PEP 5 描述了引入向后不兼容的更改所需遵循的流程,以盡可能減少對用戶的干擾。

Python 是一種對編程初學者友好的語言嗎??

是的。

從過程式、靜態(tài)類型的編程語言例如 Pascal, C 或者 C++ 以及 Java 的某一子集開始引導學生入門仍然是常見的做法。 但以 Python 作為第一種編程語言進行學習對學生可能更有利。Python 具有非常簡單和一致的語法和龐大的標準庫,而且最重要的是,在編程入門教學中使用 Python 可以讓學生專注于更重要的編程技能,例如問題分解與數(shù)據(jù)類型設計。 使用 Python,可以快速向?qū)W生介紹基本概念例如循環(huán)與過程等。 他們甚至有可能在第一次課里就開始接觸用戶自定義對象。

對于之前從未接觸過編程的學生來說,使用靜態(tài)類型語言會感覺不夠自然。 這會給學生帶來必須掌握的額外復雜性,并減慢教學的進度。 學生需要嘗試像計算機一樣思考,分解問題,設計一致的接口并封裝數(shù)據(jù)。 雖然從長遠來看,學習和使用一種靜態(tài)類型語言是很重要的,但這并不是最適宜在學生的第一次編程課上就進行探討的主題。

還有許多其他方面的特點使得 Python 成為很好的入門語言。 像 Java 一樣,Python 擁有一個龐大的標準庫,因此可以在課程非常早期的階段就給學生布置一些 實用 的編程項目。 編程作業(yè)不必僅限于標準四則運算和賬目檢查程序。 通過使用標準庫,學生可以在學習編程基礎知識的同時開發(fā)真正的應用,從而獲得更大的滿足感。 使用標準庫還能使學生了解代碼重用的概念。 而像 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 語言編寫。 PythonWin 是一個 Windows 專屬的 IDE。 Emacs 用戶將高興地了解到 Emacs 具有非常好的 Python 模式。 所有這些編程環(huán)境都提供語法高亮,自動縮進以及在編寫代碼時使用交互式解釋器等功能。 請訪問 Python wiki 查看 Python 編程環(huán)境的完整列表。

如果你想要討論 Python 在教育中的使用,你可能會有興趣加入 edu-sig 郵件列表。