Python常見問題?

一般信息?

什么是 Python??

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

要了解更多詳情,請(qǐng)先查看 Python 教程。 Python 新手指南 提供了學(xué)習(xí) Python 的其他入門教程及資源的鏈接。

什么是 Python 軟件基金會(huì)??

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

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

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

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

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

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

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

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

在 1989 年的圣誕假期中,我手頭的時(shí)間非常充裕,因此我決定開始嘗試一下。 在接下來的一年里,雖然我仍然主要用我的業(yè)余時(shí)間來做這件事,但 Python 在 Amoeba 項(xiàng)目中的使用獲得了很大的成功,來自同事的反饋?zhàn)屛业靡栽黾恿嗽S多早期的改進(jìn)。

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

Python 適合做什么??

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

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

Python 版本的編號(hào)形式是怎樣的??

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

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

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

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

另請(qǐng)參閱 sys.version, sys.hexversion 以及 sys.version_info 的文檔。

我應(yīng)如何獲取一份 Python 源代碼的副本??

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

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

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

我應(yīng)如何獲取 Python 的文檔??

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

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

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

有許多可選擇的教程和書籍。 標(biāo)準(zhǔn)文檔中也包含有 Python 教程。

請(qǐng)參閱 新手指南 以獲取針對(duì) Python 編程初學(xué)者的信息,包括教程的清單。

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

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

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

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

我應(yīng)如何獲取 Python 的公開測(cè)試版本??

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

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

我應(yīng)如何為 Python 提交錯(cuò)誤報(bào)告和補(bǔ)????

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

有關(guān) Python 開發(fā)流程的更多信息,請(qǐng)參閱 Python 開發(fā)者指南。

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

可能作為參考文獻(xiàn)的最好方式還是引用你喜歡的 Python 相關(guān)書籍。

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

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

是否有任何 Python 相關(guān)的書籍??

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

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

www.python.org 具體位于世界上的哪個(gè)地點(diǎn)??

Python 項(xiàng)目的基礎(chǔ)架構(gòu)分布于世界各地并由 Python 基礎(chǔ)架構(gòu)團(tuán)隊(duì)負(fù)責(zé)管理。 詳情請(qǐng)?jiān)L問 這里。

為何命名為 Python??

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

我必須喜歡 "Monty Python 的飛行馬戲團(tuán)" 嗎??

不必,但這對(duì)學(xué)習(xí)會(huì)有幫助。 :)

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

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

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

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

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??

使用者應(yīng)該數(shù)以百萬計(jì),但很難獲得一個(gè)精確的數(shù)字。

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

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

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

請(qǐng)?jiān)L問 https://www.python.org/about/success 查看使用了 Python 的項(xiàng)目列表。 閱覽 歷次 Python 會(huì)議 的日程紀(jì)要可以看到許多不同公司和組織所做的貢獻(xiàn)。

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

在未來可以期待 Python 將有什么新進(jìn)展??

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ā)會(huì)在 python-dev 郵件列表 中進(jìn)行討論。

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

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

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

Python 是一種對(duì)編程初學(xué)者友好的語言嗎??

是的。

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

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

還有許多其他方面的特點(diǎn)使得 Python 成為很好的入門語言。 像 Java 一樣,Python 擁有一個(gè)龐大的標(biāo)準(zhǔn)庫,因此可以在課程非常早期的階段就給學(xué)生布置一些 實(shí)用 的編程項(xiàng)目。 編程作業(yè)不必僅限于標(biāo)準(zhǔn)四則運(yùn)算和賬目檢查程序。 通過使用標(biāo)準(zhǔn)庫,學(xué)生可以在學(xué)習(xí)編程基礎(chǔ)知識(shí)的同時(shí)開發(fā)真正的應(yīng)用,從而獲得更大的滿足感。 使用標(biāo)準(zhǔn)庫還能使學(xué)生了解代碼重用的概念。 而像 PyGame 這樣的第三方模塊同樣有助于擴(kuò)大學(xué)生的接觸領(lǐng)域。

Python 的解釋器使學(xué)生能夠在編程時(shí)測(cè)試語言特性。 他們可以在一個(gè)窗口中輸入程序源代碼的同時(shí)開啟一個(gè)解釋器運(yùn)行窗口。 如果他們不記得列表有哪些方法,他們這以這樣做:

>>>
>>> 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]

通過使用解釋器,學(xué)生編寫程序時(shí)參考文檔總是能伴隨在他們身邊。

Python 還擁有很好的 IDE。 IDLE 是一個(gè)跨平臺(tái)的 Python IDE,它基于 Tkinter 庫,使用 Python 語言編寫。 PythonWin 是一個(gè) Windows 專屬的 IDE。 Emacs 用戶將高興地了解到 Emacs 具有非常好的 Python 模式。 所有這些編程環(huán)境都提供語法高亮,自動(dòng)縮進(jìn)以及在編寫代碼時(shí)使用交互式解釋器等功能。 請(qǐng)?jiān)L問 Python wiki 查看 Python 編程環(huán)境的完整列表。

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