Python（；），是一種廣泛使用的解釋型、高階和通用的程式語言。Python 支援多種程式設計範型，包括結構化、過程式、反射式、面向物件和函數語言程式設計。它擁有動態型別系統和垃圾回收功能，能夠自動管理記憶體使用，並且其本身擁有一個巨大而廣泛的標準庫。它的語言結構以及面向物件的方法，旨在幫助程式設計師為小型的和大型的專案編寫邏輯清晰的程式碼。 吉多範羅蘇姆於 1980 年代後期開始研發 Python，作為 ABC 語言的後繼者，它也可以被視為採用了叫做的中綴表示法的一種 LISP 方言。吉多範羅蘇姆於 1991 年首次釋出 Python 090。Python 20 於 2000 年釋出並引入了新功能。Python 30 於 2008 年釋出，它是該語言的主要修訂版，並非完全向後相容。Python 2 於 2020 年隨 2718 版停止支援。 Python 的設計哲學，強調程式碼的可讀性和簡潔的語法，尤其是使用空格縮排來劃分程式碼塊。相比於 C 語言或 Java，Python 讓開發者能夠用更少的程式碼表達想法。 Python 直譯器本身幾乎可以在所有的作業系統中執行，它的官方直譯器 CPython 是用 C 語言編寫的。Python 是一個由社群驅動的自由軟體，目前由 Python 軟體基金會管理。Python 是最受歡迎的程式語言之一。 歷史 Python 的創始人吉多範羅蘇姆，在 1982 年至 1995 年間，參與了荷蘭數學和計算機科學研究學會多個專案的工作。1989 年的聖誕節期間，他決心開發一個新的指令碼解釋程式，作為 ABC 語言的繼承者，並且用它替代 Unix shell 和 C 語言來進行系統管理，擔負與之間的互動操作並進行例外處理。他是 BBC 電視劇《Monty Python 的飛行馬戲團》的愛好者，所以選取了 Python 作為這個程式語言的名字。範羅蘇姆作為 Python 的主要開發者，獨自擔負這個專案的發展決策者職責，直到 2018 年 7 月 12 日，他宣佈從終身仁慈獨裁者（BDFL）的職位上 永久休假。他在 2019 年 1 月至 11 月參與了第一屆五人掌控委員會繼續領導專案發展。 在 1991 年 2 月，範羅蘇姆在 altsources 上釋出了最初程式碼（標記為版本 090），這時就已經存在了帶繼承的類、例外處理、函式和核心型別 list、dict、str 等。在這個最初發行中就有了從 Modula3 引進的模組系統，和例外處理機制。在 1994 年 1 月，Python 達到了版本 10，其主要新特徵是由 Amrit Prem 提供的函數語言程式設計工具 lambda、map、filter 和 reduce。受 Modula3 啟發，Python 11 介入了預設引數值，Python 13 介入了關鍵字引數。Python 14 介入了對複數的內建支援，還包含了採取名字修飾的一種基本形式的。 在 2000 年 10 月，Python 20 發布，它從函數語言程式設計語言 Haskell 中引進了列表推導式，並且支援了 Unicode，還向垃圾回收系統增加了環檢測演算法。Python 21 支援了靜態巢狀作用域和閉包。Python 22 進行了重大革新，將 Python 中用 C 語言寫成的型別，和用 Python 語言寫成的類，統一成在同一個層級中，使得 Python 的物件模型成為純粹而一致的物件模型；還介入了迭代器，受 CLU 和 Icon 啟發的生成器，和描述器協議。Python 23 介入了從 Dylan 引進的方法決定次序。Python 24 介入了型別，和函式修飾器。Python 25 介入了 with 語句，並在官方實現中介入了抽象語法樹。 在 2008 年 12 月，Python 30 發布，它對語言做了較大修訂而不能完全後向相容，儘管提供了進行自動轉換 2to3 實用工具，仍有大量現存程式碼不能移植，故而 Python 27 的產品壽命結束延期至 2020 年元旦。Python 34 介入了非同步 IO 模組。Python 35 介入了型別提示，和採用 asyncawait 語法的協程。Python 38 介入了賦值表示式。 在 2020 年 10 月，Python 39 介入了內建的針對容器類的泛化別名（typesGenericAlias）型別，並在官方實現中介入了新的語法解析器。Python 310 介入了結構式模式匹配，和內建的聯合型別（typesUnionType）。Python 311 對官方實現進行了最佳化提速。Python 312 介入了型別引數語法和 type 語句，並廢棄或移除了一些過時的模組和功能。Python 313 介入了新的互動式直譯器，並實驗性的支援了在自由執行緒模態下執行和即時編譯器。 每個版本首次發行後，享有 2 年的完全支援，隨後是 3 年的安全支援。當前只有 Python 3 的穩定版本 312 與 313 正在被完全支援，但仍提供對 39、310 和 311 版本的安全性修正。 在 2024 年 12 月，活躍的 Python 核心開發者，選舉 Pablo Galindo Salgado、Barry Warsaw、Emily Morehouse、Gregory P Smith 和 Donghee Na，為 2025 年度 掌控委員會 的五位成員來領導這個專案。 特徵與設計哲學 Python 是多範型程式語言。它完全支援結構化程式設計和麵向物件程式設計，還有很多特徵支援函數語言程式設計和超程式設計比如元物件協議（元類和魔術方法）。透過擴充套件還可以支援很多範型，包括面向方面程式設計、契約式設計 和邏輯程式設計。 Python 使用動態型別，在記憶體管理上採用的垃圾回收器基於了引用計數，並且結合了檢測環引用的分代垃圾回收最佳化。它的特徵還有動態名字解析，即在程式執行期間繫結方法和變數的名字。 Python 對遵循 LISP 傳統的函數語言程式設計提供了有限的支援，它提供了 map、filter 和 reduce 函式；列表推導式、字典、和生成器表示式。標準庫中的模組 functools 和 itertools，實現了從 Haskell 和 Standard ML 借鑑來的函式式工具。 Python 的設計理念是 優雅、明確、簡單，它的一些重要準則被合稱為「Python 之禪」。在 Python 直譯器內執行 import this 可以獲得完整的列表，下面舉出其中首要： 優美優於醜陋。明瞭優於隱晦。 簡單優於複雜。複雜優於凌亂。 扁平優於巢狀。稀疏優於稠密。 可讀性很重要。 Python 開發者的方法論是 用一種方法，最好是隻有一種方法來做一件事，顯著不同於以 Perl 語言為代表的 不止一種方法去做一件事 風格。Python 開發者在設計語言時，如果面臨多種選擇，一般會選擇明確沒有或者很少有歧義的語法。 範羅蘇姆認為 ABC 語言非常優美和強大，它沒有取得成功的原因是不開放造成的，故而將 Python 本身設計為可擴充的。Python 並不把所有的特性和功能都整合到語言核心，而是提供了豐富的 API 和工具，以便程式設計師能夠輕鬆地使用 Python、C 語言、Cython 來編寫擴充模組。Python 還可以透過如標準庫中的 ctypes 等，來提供 C 語言相容資料型別，並訪問動態連結庫或共享庫中的函式，從而對用其他語言編寫的程式進行整合和封裝。 在 Python 的官方實現 CPython 中，一般避開不成熟的或者對非重要部位的加快執行速度的最佳化。在某些對執行速度要求很高的情況，可以使用具備 JIT 技術的 Python 實現或安裝 JIT 擴充套件模組。 語法和語義 Python 為了讓程式碼具備高度的可閱讀性，在設計時盡量使用了其它語言常用的符號和英文單字。 行結構 Python 支援使用反斜槓作為行接續符，將多個物理行合成為一個邏輯行。在圓括號、方括號或花括號之中的表示式，可以分裂跨越多於一個物理行而不使用反斜槓，這被稱為 隱式行接續。註釋開始於並非一部份的一個井號 ，並結束於物理行結尾；註釋標示邏輯行的結束，除非已受制於隱式行接續規則；註釋在語法上被忽略。 簡單語句包含在一個單一的邏輯行之內，Python 支援使用分號作為分隔符，將多個簡單語句合併入語法意義上的一行之中。 縮排 Python 語法中的複合語句，包含（成組的）其他語句；它們以某種方式影響或控制這些其他語句的執行。Python 的複合語句包含一個或多個子句（clause），子句構成自一個頭部（header）和一個套件（suite）。特定複合語句的子句頭部都在同樣的縮排層級上，每個子句頭部開始於一個唯一標識關鍵字，並結束於一個冒號。套件是這個子句所控制的一組語句，套件有兩種形式，可以是與頭部在同一行上的一個或多個由分號分隔的簡單語句，它們跟隨在這個頭部的冒號之後；或者是在後續諸行上的一個或多個縮排的語句，只有這種套件形式可以包含巢狀的複合語句。 Python 語言遵循越位規則，利用縮排來形成語句套件，即語法意義上的塊。連續諸行的縮排層級，被用來生成語法解析器才能見到的 INDENT 和 DEDENT 記號，二者的作用相當於 C 語言家族的花括號，或 Pascal 語言家族的關鍵字 begin 和 end。增加縮排就生成 INDENT 記號，減少縮排就生成 DEDENT 記號。根據 PEP 8 的規定，使用 4 個空格來表示每級縮排。 tab 字元（從左至右）被替代為 1 至 8 個空格，使得直到 tab 之前的諸字元加上這些替代空格的字元總數，是 8 的倍數（這意圖同於 Unix 所用規則）。前導於第一個非空白字元的空格的總數，確定了這一行的縮排層級。縮排所用諸字元，不能使用反斜槓來拆分成多個物理行；直到第一個反斜槓之前的空白確定縮排層級。如果原始碼檔案混合了 tab 和空格，並且在這種方式下縮排的意義依賴於一個 tab 相當於多少個空格，則這種縮排因不一致性而被報錯並拒絕。 關鍵字 Python 有如下 35 個關鍵字；它們不能用作識別符號： and as assert async await break class continue def del elif else except False finally for from global if import in is lambda None nonlocal not or pass raise return True try while with yield 內建常量 True、False 和 None 於 Python 版本 30 中成為關鍵字，關鍵字 nonlocal 介入於版本 30，關鍵字 async 和 await 介入於版本 35，並在版本 37 中成為正式關鍵字。 在 Python 中，將只在特定上下文中保留的識別符號，稱為 軟關鍵字： match、case 和萬用字元_，介入於版本 310，它們在與模式匹配語句有關的上下文中，可以在語法上充當關鍵字；但是這種區分只在語法解析器層次進行，並非在詞法分析記號化層次。 type，介入於版本 312，它用在 type 語句之中。 識別符號 識別符號就是名字，在 ASCII 範圍內（U0001U007F），可用於識別符號的字元為：大寫字母 A 至 Z 和小寫字母 a 至 z，下劃線_以及數字 0 至 9，但首字不可以用數字。如下命名約定，是為 保留識別符號類： _spam（單下劃線開頭）：弱 內部使用 標識。對於 from M import ，將不匯入所有以下劃線開頭的物件。 spam_（單下劃線結尾）：為了避免與 python 關鍵字的命名衝突。 __spam（雙下劃線開頭）：在命名一個類特性的時候，採用名字修飾，比如在類 SpamEggs 內，__spam 將變成_SpamEggs__spam。 __spam__（雙下劃線開頭雙下劃線結尾）：指那些包含在使用者控制的名稱空間中的 魔術 方法或特性，比如__delattr__、__dir__、__doc__、__getattribute__、__init__、__new__、__repr__、__setattr__、__sizeof__等。建議永遠不要將這樣的命名方式應用於自己的變數或函式。 在 Python 文獻中經常使用的是而非傳統的 foo 和 bar。 語句 Python 的語句包括簡單語句： 賦值語句，採用的中綴記號是等號 。賦值語句被用來將名字繫結（含重新繫結）到值，以及用來修改可變物件的特性或專案。 Python 還支援增廣賦值語句，將一個二元運算和一個賦值語句合併成一個單一語句，例如 x 1。 Python 支援 序列解包（sequence unpacking）：在等號左側可以是一個表示式列表，其中每個表示式都可求值成能被賦值的東西（變數、可寫特性等）；在等號右側相應的是一個 可迭代 物件，它在被迭代時產生的值的數量，同於左手側可寫表示式的數量；賦值語句對這個物件進行迭代，將產生的每個值分別賦值給左側對應的可賦值者。在等號右側直接包裝出序列解包所要求的元組，就形成了並行賦值，可以同時給多個變數賦值，還可以交換兩個變數的值。 語句，用來互動式的計算並寫出一個值，或者用來呼叫一個過程（即返回無含義結果的函式），在 Python 中過程返回值 None。 global 語句，是在整個當前程式碼塊中成立的宣告，它意味著隨後列出的識別符號被解釋為全域性變數。 nonlocal 語句，導致隨後列出的識別符號，提及在除了全域性作用域之外的最近包圍作用域中的先前繫結變數。 type 語句，介入於版本 312，宣告作為類型別名型別（typingTypeAliasType）的例項的一個類型別名。 pass 語句，充當 NOP，表示此行為空，不執行任何操作。 assert 語句，用於程式調適階段時測試執行條件是否滿足。 continue 語句，越過這次迭代並繼續進行下個專案。 break 語句，從迴圈中跳出。 return 語句，用來從函式返回值。當函式執行到 return 語句時，它會停止執行並將指定的值返回給呼叫者。 raise 語句，丟擲一個例外。 yield 語句，使用它從一個生成器中返回一個值。在版本 25 之前，資訊只能單向的從生成器傳遞出來。 自此版本 25，重定義 yield 為表示式，透過它的返回值將資訊傳遞進入生成器函式中，從而能夠支援協程功能。yield 語句在語義上等價於加圓括號的 yield 表示式。 自從版本 33，提供了 yield from 語句，含有這個語句的 委託生成器 將其部份運算委託給另一個 子生成器，將傳入資訊遞送給它並直接回傳它產生的值。版本 34 在非同步 IO 框架中擴充套件了基於生成器的協程，這個擴充套件自從 Python 38 已經被棄用。 自從版本 36，介入了生成 async for 語句所用的非同步迭代器的非同步生成器。 import 語句，匯入一個模組或包，它組合了兩種操作，查詢指名的模組，接著將找到的結果繫結到在區域性作用域中的名字。匯入語句有三種形式（下述語句樣本中的方括號表示其中內容為可選的）： import 模組名字 as 別名，找到一個模組，裝載它，如果有需要的話初始化它；在這個匯入語句出現的作用域的區域性名字空間中，定義一個名字或一些名字。 from 模組名字 import 定義 1 as 別名 1 定義 2 as 別名 2 ，找到、裝載、必需時初始化一個模組；接著在區域性名字空間中，增加到找到指名特性的引用。 from 模組名字 import ，在匯入語句出現的作用域的區域性名字空間中，繫結模組中定義的所有公開的名字。 del 語句，遞迴的進行刪除。 複合語句： if 語句，當條件成立時執行語句套件。它經常包含 elif、else 子句。 while 語句，當條件為真時，重複執行語句套件。 for 語句，遍歷列表、字串、字典、集合等迭代器，依次處理迭代器中的每個元素。 match 語句，用於模式匹配。 語句，它經常包含 except、else、finally 子句，處理在程式執行中出現的異常情況。Python 支援並廣泛使用例外處理，作為檢測錯誤狀況和程式中其他 例外 事件的方式，並提倡在可能出現錯誤狀況的任何時候都使用例外。習慣上訪問一個檔案或資源不在使用之前進行測試，而是先行嘗試使用它，再捕獲訪問被拒絕引發的例外。Python 311 介入了 except 子句。 with 語句，把一塊程式碼包裹在一個上下文管理器之內。它允許了資源獲取即初始化（RAII）式行為，可替代常見的 tryfinally 慣用法。Python 使用 with 語句處理資源，在進入一個作用域的時候呼叫一個函式，而在離開它的時候呼叫另一個函式，例如：在一塊程式碼執行之前獲取一個鎖，並且在此後釋放這個鎖；或事先開啟一個檔案，並且事後關閉它。 class 語句，是定義類的可執行語句。類的繼承列表給出基礎類列表，沒有繼承列表的類，預設繼承基礎類 object。類的套件接著在新的執行框架（frame）中執行，它使用新建的區域性名字空間和原來的全域性名字空間。當這個類套件完成執行之時，丟棄它的執行框架並儲存它的區域性名字空間。一個類物件接著被建立，其基礎類採用繼承列表，其特性字典採用儲存的區域性名字空間。類名字接著在原來的區域性名字空間中，被繫結到這個類物件。 def 語句，是定義函式和方法的可執行語句。它的執行在當前區域性名字空間中，將函式名字繫結到一個函式物件（對函式的可執行程式碼的包裝器）。這個函式物件包含到當前全域性名字空間的引用，作為呼叫這個函式時使用的全域性名字空間。 async def 語句，用於協程函式定義。await 表示式、async for 語句和 async with 語句，只能用在協程函式的主體中。 塊與模組 Python 程式構造自程式碼塊。塊是作為一個單元執行的 Python 程式文字，模組、函式主體和類定義都是塊。互動式鍵入的每個命令、指令碼檔案和指令碼命令都是程式碼塊。傳遞給內建函式 eval 和 exec 執行的字串是程式碼塊。 程式碼塊在執行框架（frame）中執行。框架包含一些用於除錯的管理資訊，並確定在這個程式碼塊執行完成後，執行在何處以及如何繼續。名字空間是儲存變數的地方，它被實現為字典。有區域性名字空間、全域性空間即包含此程式碼塊的那個模組的名字空間，和內建名字空間即模組 builtins 的名字空間；物件的方法是定義在類主體內的函式，它有著巢狀的名字空間。名字空間透過防止命名衝突而支援了模組性，還透過明晰了哪個模組實現了哪個函式而增進可讀性和可維護性。 模組是包含 Python 定義和語句的一個檔案，這個檔名字是模組名字附加上字尾py；在一個模組中，模組的名字（作為字串）可獲得為全域性變數__name__的值。包（package）是可以包含子模組或遞迴性的子包的模組。包在技術上是具有__path__特性的 Python 模組。可以將包視為檔案系統上的目錄，而將模組視為這種目錄中的檔案，但是包和模組不必然源自檔案系統。 完整的 Python 程式，在一個極小初始化的環境中執行：所有內建和標準模組均可獲得，但除了 sys（各種系統服務）、builtins（內建函式、例外和 None）和__main__之外都未被初始化。__main__用來為完整程式的執行提供區域性和全域性名字。當直譯器被呼叫在互動模態下的時候，它一次一個的讀取並執行語句；初始環境同於完整程式，每個語句都在__main__的名字空間中執行。 頂層程式碼是啟動執行的首個使用者指定 Python 模組。__main__是頂層程式碼執行所在的環境。從命令列使用 m 引數，作為頂層指令碼執行的模組（作為模組__main__）是程式碼塊。此時__name__變數被設定為 __main__，籍此可在這個模組中增加直接執行時候執行的程式碼。 名字是通用的引用持有者，它不關聯於一個固定的資料型別，但是，一個名字在給定時間，總是被繫結到有一個型別的某個物件上，這就是動態型別的特徵。名字的儲存位置不 包含 所指示的值，一個共同的值可以賦值給多個名字，一個名字在任何時候，都可以重新繫結到各種不同型別的物件上，包括字串、過程、具有資料和方法的複雜物件等。如果一個名字繫結在一個塊中，它是這個塊的區域性變數，除非被宣告為 nonlocal 或 global。如果一個名字繫結在模組層次，它是全域性變數。模組程式碼塊的變數，既是區域性的也是全域性的。如果一個變數使用在一個程式碼塊中，卻不定義在這裡，它是自由變數。 內建 vars 函式，返回一個模組、類、例項或任何具有字典特性__dict__的物件的字典特性。內建 globals 函式，返回實現當前模組的名字空間的一個字典。內建 locals 函式，更新並返回表示當前區域性符號表的一個字典。在函式塊中而非類塊中呼叫 locals 之時，它返回自由變數。在模組層級上，locals 和 globals 返回同一個字典。內建 dir 函式，在無引數時，返回在當前區域性作用域內的名字列表；在有一個引數時，嘗試返回這個物件的有效特性的列表。 在 Python 中賦值所進行的操作，是將一個名字繫結為到一個分立的動態分配的物件的一個引用。除了在塊中出現的每個賦值語句或匯入語句之外，下列構造也繫結名字：給函式的形式引數、類定義、函式定義、賦值表示式、在 for 語句頭部中和各種 as 關鍵字之後的識別符號目標（target），as 關鍵字出現在 import 語句、with 語句、except 子句、except 子句和結構式模式匹配的 as 模式之中。 作用域定義一個名字在一個塊中的可見性。如果一個區域性變數被定義在一個塊中，它的作用域包括這個塊。如果這個定義出現在一個函式塊中，作用域擴充套件到在所界定作用域內包含的任何塊，除非所包含的塊為這個名字介入了不同的繫結。當一個名字在一個程式碼塊之中使用，它採用最近包圍作用域來解析。對一個程式碼塊可見的所有這種作用域的集合，叫做這個這個塊的 環境。 如果一個名字繫結在一個塊中，並且在其中於繫結之前就被使用，會導致一個錯誤。 如果 global 語句出現在一個塊之中，在這個語句中指定的所有名字，提及在頂層名字空間中這些名字的繫結。名字在頂層名字空間解析，首先查詢全域性名字空間，未果查詢內建名字空間。global 語句與在同一個塊中的名字繫結運算有同樣的作用域。如果一個自由變數的最近包圍作用域包含針對它的 global 語句，這個自由變數被當作全域性的。 當一個函式或類的定義被巢狀到其他函式的定義之內，它的非區域性作用域就是這個包圍函式的區域性作用域。nonlocal 語句導致其列出的識別符號，提及在非區域性作用域內先前繫結的名字（即）。 表示式 Python 中很多與 C 語言和 java 類似，而另一些則與之不同。 在 Python 中，算術運算的加法 、減法 、乘法 和取模 是與 C 語言和 java 相同的，但是除法的行為不同。在 Python 中有兩種除法，它們是下取整除法（或整數除法） 和浮點除法 。Python 增加了指數算符 。自從 Python 35，介入了矩陣乘法算符 ，它已經用於了 NumPy 庫。 在 Python 中，有如下必須用於整數的位運算： 與（AND）， 或（OR）， 非（NOT）， 異或（XOR）， 右移， 左移。 在 Python 中，有如下比較運算：大於 ，小於 ，等於 ，不等於！，小於等於 ，大於等於。 按值比較。Python 的 is、is not 算符可以用來比較物件的同一性（按引用比較），也就是比較兩個變數是否引用了同一個物件。而 in、not in 用於判斷一個物件是否屬於另外一個物件。在 Python 中，比較是可以連結起來的，比如 a b c。 Python 使用 and、or、not 表示邏輯運算與、或、非，不採用 C 語言和 Java 中所用的符號 、、。 在 Python 中，由逗號，分隔的一組表示式，叫做表示式列表。Python 為構造列表、字典或集合，提供了叫做 顯示 的特殊語法，它們每個都有兩種方式：包容內容要麼顯式列舉出來；要麼透過一組迴圈和過濾指令計算而來，這叫做 推導式。列表顯示是包圍在方括號中的可以為空的一系列表示式，一個例子列表可寫為 123。字典顯示是包圍在花括號中的可能為空的一系列的鍵 資料項對。集合顯示用花括號來指示，與字典顯示的區別是缺少分隔鍵與值的分號。自從 Python 35，增加了在表示式列表中的 可迭代解包，和在字典顯示中的 字典解包。 Python 支援列表推導式。Python 24 將列表推導式擴充套件至更一般性的生成器表示式。Python 30 又增補了字典推導式和集合推導式。 在 Python 中，加圓括號形式（parenthesized form），是包圍在圓括號中的一個可選表示式列表。加圓括號的表示式列表產生的東西，就是這個表示式列表所產生的：如果這個列表包含至少一個逗號，它產生一個元組；否則它產生構成這個表示式列表的那個單一表達式。一個例子元組可寫為 123。元組不是圓括號形成的，而是使用逗號形成的，在沒有歧義的情況下，元組的圓括號是可選的。空的圓括號對產生空元組物件。使用序列串接算符 來串接二個元組，產生包含給定元組二者的元素的一個新元組。 Python 支援在序列物件（比如字串、元組或列表）上的下標（subscription）表示式：a 索引，和表示式：a 開始：停止 或 a 開始：停止：步長。下標索引是基於零的，負數是相對於結尾的。分片範圍自從 開始 索引，直到但不包括 停止 索引。分片的第三個引數叫做 步長（step）或 間隔（stride），允許元素被跳過和用負數指示反向。分片索引可以省略，例如 a ，這返回整個列表的一個複本。分片的每個元素都是的。 Python 的條件表示式表示為 x if c else y。意思是當 c 為真時，表示式的值為 x，否則表示式的值為 y。 在運算元的次序上不同於很多其他語言中常見的 c x y。 Python 的匿名函式實現為 lambda 表示式。匿名函式體只能是一個表示式。 自從 Python 38，介入了賦值表示式，其記號是。它將一個表示式賦值給一個識別符號，同時還返回這個表示式的值。賦值表示式在用作子表示式，即位於分片表示式、條件表示式、lambda 表示式、關鍵字引數中的表示式和推導式中的 if 表示式之中，以及在 assert 和 with 語句之中的時候，必須圍繞著圓括號。在它們可以使用的所有其他地方，包括在 if 和 while 語句之中，都不要求圓括號。 Python 中運算子具有優先順序，下表中的運算子按照從最高到最低的次序列出。在相同單元格中運算子具有相同的優先順序，它們從左至右結合，除了指數表示式和條件表示式從右至左結合之外： 運算子 描述 表示式，表示式，鍵：值，表示式 加圓括號表示式，列表顯示，字典顯示，集合顯示 x 索引，x 索引：索引，x 引數，x 特性 下標，分片，呼叫，特性引用 await x await 表示式 指數 x，x，x 取原數，相反數，逐位 NOT ，，，， 乘法，矩陣乘法，除法，下取整除法，餘數 ， 加法和減法 ， 移位 逐位 AND 逐位 XOR 逐位 OR in，not in，is，is not，，，，，， 包含成員關係測試，同一測試，各種比較 not x 布林 NOT and 布林 AND or 布林 OR if else 條件表示式 lambda lambda 表示式 賦值表示式 Python 提供了序列串接算符 和序列倍增算符 。自從 Python 39，介入了字典歸併算符 和字典更新算符 。 Python 的文字序列型別，包括字串 str 和位元組序列 bytes 與 bytearray。有多種寫法，字串物件有一個內建格式算符 ： 短字串文字，由單引號 或雙引號 界定。不同於 Unix shell、Perl 和受 Perl 影響的語言，單引號和雙引號功能相同。這二種字串都使用反斜槓 作為跳脫字元。 長字串文字，是開始並結束於三個單引號 或三個雙引號 的序列。它們可以跨越多行，其功能就像 shell、Perl 和 Ruby 中的 here 文件。 位元組總是字首上一個 b 或 B，它產生 bytes 型別的例項。它們只可以包含 ASCII 字元，具有 128 或更大數值的位元組必須透過轉義來表達。 字串文字或位元組文字都可選的能字首上一個 r 或 R，這叫做。轉義序列不被解釋，因此在文字反斜槓常見的地方很有用，比如正則表示式和 Windows 風格的路徑。這種引述可比較於 C 中的 引述。 Python 允許多個毗鄰的字串文字或位元組文字（它們以空白分界並可以使用不同的引述約定），在編譯時間於語法層面上串接起來。要在執行時間串接字串，必須使用序列串接算符 。 Python 中的 字串格式 算符 ，在功能上類同於 C 語言中的 printf 格式化字串，例如 spam s eggs04d blah 2，求值為spamblah eggs0002。自從 Python 30，str 類提供了可供替代的 format 方法，例如 spam0 eggs104dformat blah 2。在 Python 36 中，提供了 格式化字串文字 或稱為 f 字串，它向字串文字字首上 f 或 F，這是一種，例如 xblah y2 fspamx eggsy04d。 在 Python 中，在表示式和語句之間的區別是嚴格強制性的，這對比於語言如 Common Lisp、Scheme 或 Ruby。故而 Python 中個別構造存在功能重複，比如：列表推導式相當 for 迴圈；條件表示式相當 if 語句；內建函式 eval 相當 exec ，前者用於表示式，後者用於語句。 語句不能成為表示式的一部份，由於列表和其他推導式或 lambda 表示式，都是表示式，也就不能包含語句。這個限制的一個示例：賦值語句比如 a 1，不能用作條件語句的條件判斷表示式的一部份；這能夠避免 C 語言程式設計中的一個常見錯誤，即在條件判斷時把等於算符 誤寫為賦值算符 ，這不是預期程式碼卻在語法上有效而能透過編譯器檢查，在 Python 中這會導致一個語法錯誤。 函式 Python 的函式支援遞迴和閉包，及其他頭等函式特徵，但不支援函式過載。Python 的函式作為頭等物件，具有和普通物件平等的地位。Python 官方實現不提供尾呼叫最佳化或頭等續體，吉多範羅蘇姆曾聲稱永遠都不會加以支援，但有第三方庫支援。 Python 可以在函式定義時，於形式引數序列中，指定形式引數預設值，即以 paramvalue 樣式進行一次性初始化。形式引數在初始化之後，保持既有繫結；函式的後續呼叫，可繼續對它進行訪問或變更。為有預設值的形式引數提供實際引數，在函式呼叫時是可選的。 Python 的函式實際引數與形式引數之間的結合，是傳遞 物件引用，函式在被呼叫的時候，給函式呼叫的實際引數，被介入到一個區域性符號表中，實際引數使用傳值呼叫來傳遞，而這個值總是物件引用，而非這個物件的值。如果形式引數繫結到一個可變的物件，則透過形式引數對此物件內容的修改，在函式外也是可見的。如果形式引數繫結到一個不可變的物件，則透過形式引數是不能修改此物件內容，但可以把形式引數重新繫結到其它物件上，這並不影響函式外的物件的值。 Python 支援位置實際引數和關鍵字實際引數。函式呼叫時，實際引數可以如同 C 語言那樣，按照位置與形式引數匹配；也可以採用命名引數或稱為關鍵字實際引數，即 kwargvalue 樣式的實際引數。使用不對應實際引數的特殊形式引數 和 ，可以將引數序列分為三部份：唯位置引數、可位置可關鍵字引數和唯關鍵字引數。有預設值的形式引數之後，不能跟隨無預設值的可位置形式引數。在一個函式呼叫的實際引數序列中，關鍵字實際引數必須出現在位置實際引數之後。 在位置和關鍵字形式引數序列末尾，可以分別有 args 或 kwargs 這樣的形式引數，它們對應於在函式呼叫時提供的，超出形式引數序列規定而無所對應的多個實際引數；在形式引數名字前加一個 號，該形式引數 args 是 tuple 型別，對應可變數目的位置實際引數；在形式引數名字前加 號，該形式引數 kwargs 是 dict 型別，對應可變數目的關鍵字實際引數。如果位置實際引數已經在一個序列型別如列表或元組的物件中，在引用它的變數前加一個 號傳遞給函式，則其中所有元素解包為多個位置實際引數；如果關鍵字實際引數在字典中，則加 號來傳遞給函式。 修飾器（decorator）可用來修改一個函式、方法或類定義的任何可呼叫 Python 物件。將已定義的原來物件傳遞給修飾器，它返回一個修改後的物件，接著把它繫結到在定義中那個名字。Python 修飾器部份受到 Java 註解的影響，而有類似的語法；修飾器語法是純粹的語法糖，使用 作為關鍵字形成修飾符。修飾器是一種形式的超程式設計，它們增強它們所修飾的函式或方法的行動。 多個修飾器可以連結起來，透過在毗連的行上放置多個修飾符，或者使用中間變數。 函式修飾器的正規用法包括：用來建立類方法或靜態方法、設定先決條件和後置條件、實現多方法、增加函式特性、、同步；此外更遠大的用法包括：尾呼叫消除、記憶化。 為了增強程式碼的可讀性，可以在函式後書寫 文件字串（簡稱 docstrings），用於解釋函式的作用、引數的型別與意義、返回值型別與取值範圍等。可以使用內建函式 help ，打印出函式的使用幫助。自從 Python 30，函式可以對引數與返回值增加型別標註。此特性可方便對原始碼進行更深入的分析。自從 Python 35，開始支援型別提示。 物件及其方法 Python 支援大多數面向物件程式設計技術。在 Python 中所有東西都是物件，包括類、函式、數和模組。它允許多型性，不只是在之內，而且透過採用鴨子型別的方式。任何物件可以用於任何型別，只要它有適當的方法和特性（attribute）就能工作。Python 天然支援類的繼承包括多重繼承，為此採用 C3 線性化或方法決定次序（MRO）演算法，還支援混入。Python 支援元類，自從 Python 36，提供了定製類建立的簡單機制。 Python 使用名字修飾，有限的支援私有變數。物件的（可寫）特性可以被提取為一個字典。在 Python 中，不強制使用訪問子與變異子方法，來訪問資料成員的面向物件程式設計信條。就像 Python 提供函數語言程式設計構造，但不嘗試要求一樣，它提供物件系統，但不要求面向物件程式設計行為。 物件的方法，是附屬於這個物件的類的函式。對於正常的方法和函式，語法 instancemethod arguments，是 Classmethod instance arguments 的語法糖。Python 的方法有顯式的形式引數，用來訪問例項資料；這借鑑自 Modula3，對立於隱式的 self 或關鍵字，它們用在其他一些面向物件程式語言，比如 C、Java、ObjectiveC 或 Ruby 之中。在 Python 中，self 可以被看作是一個習慣用法，它可以被換為任何其它合法的引數名。 Python 提供了 super 內建函式，在一個類的方法中呼叫此函式返回一個代理（proxy）物件，它將其方法呼叫委託給這個類的父類或兄弟類，當一個子類的方法覆蓋了超類方法的時候，可透過呼叫 super method，來呼叫與子類的 selfmethod 方法同名超類方法。 Python 支援一些以__開始和結束的特殊方法名，它們用於實現運算子過載，以及實現多種特殊功能。在 Python 中，可以透過定義特殊方法來過載運算子，比如在一個類上定義__add__，將允許在這個類的例項上使用 算符。 在 Python 中，定義了一個或多個特殊方法__get__、__set__、__delete__ 的類，可以用作描述器（descriptor）。建立一個描述器的例項，作為另一個類的一個類成員，使得這個例項成為此另一個類的屬性（property）。使用與特性（attribute）訪問相同的語法，訪問一個例項物件中的這個成員屬性。 Python 允許透過使用 classmethod 和 staticmethod 修飾符，來分別建立類方法和靜態方法。給類方法的第一個實際引數，是對類物件的引用，而非對例項的 self 引用。靜態方法沒有特定的第一個實際引數，例項或類物件，都不固定的傳遞給靜態方法。 Python 的 property 內建函式，將一個類中特殊定義的訪問一個特性的那些方法，包裝成的這個類的一個屬性。 型別 Python 使用鴨子型別，並擁有有型別的物件，和無型別的變數名字。在編譯期不檢查型別約束，而寧願在一個物件上的操作出現可能的失敗，表現出這個給定物件不具有適合的型別。儘管是動態型別系統，Python 卻是強型別的，禁止沒有明確定義的操作（比如加一個數到一個字串），而不是默默的去嘗試轉換使其有意義。Python 支援廣泛的型別和類的內省。型別是 type 的例項，可以被讀取和比較。 Python 有著範圍廣泛的基本資料型別。同時具備常規的整數和浮點算術，它透明的支援任意精度算術、複數和。Python 支援種類繁多的字串操作。在 Python 中，字串是不可變的，所以在其他程式語言中可能就地改變字串的字串操作，比如字元替換，在 Python 中返回新的字串。 Python 有一個非常有用特徵，就是蒐集（或稱容器）型別的概念。一般的說，蒐集是以一種易於引用或索引的方式，包含其他物件的物件。蒐集有二種基本形式：序列和對映。Python 對建立容器型別的物件有著語法上的支援。Python 還提供了廣泛的蒐集操縱能力，比如內建的包含元素檢查和通用迭代協議。 有次序的序列型別是列表（動態）、元組和字串。所有序列型別都是位置索引的（從 0 到長度1），並且除了字串，都可以包含任意型別的物件，在同一個序列中包括多種型別的物件。字串和元組是不可變的，使得它們成為字典的鍵的完美候選者。在另一方面，列表是可變的，元素可以被插入、刪除、修改、新增或就地排序。 在另一方面，對映是以 字典 形式實現的無次序的型別，它將一組不可變的鍵，對映到相應的元素上（非常像數學函式）。在字典中的鍵，必須是不可變的 Python 型別，比如整數或字串，因為在底層它們是透過雜湊函式實現的。字典還是語言內部的中心，因為它們居於所有 Python 物件和類的核心：在變數名字（字串）和這個名字所引用的值之間的對映，就儲存為字典，而這些字典可以透過物件的__dict__特性直接訪問。 蒐集型別，在版本 24 中被增加入語言核心。集合是無索引、無次序的蒐集，它包含唯一性的不可變物件作為元素，並且實現了集合論運算，比如並集 、交集 、相對補集 、對稱差 ，和子集測試 、真子集測試 、超集測試、真超集測試 。有二種型別的集合：可變的 set 和不可變的 frozenset。 Python 允許程式設計者使用類，定義自己的型別，類是在面向物件程式設計中最經常使用的。類的新例項，是透過呼叫這個類的構造器而建立的，而類都是元類 type 的例項，type 是 type 元類自身的例項，這允許了超程式設計和反射。 在版本 30 之前，Python 有兩種類：舊式的和新式的。二種樣式的語法是一樣的，不同在於是否直接或間接的繼承自類 object，所有新式類都從 object 繼承，並且是 type 的例項。在 Python 2 系列 22 以上，二種類都可以使用。在 Python 30 中淘汰了舊式類。 長期規劃是支援，並且自從 Python 35，語言的語法允許指定靜態型別，但在預設實現 CPython 中不檢查它們。有叫做 mypy 的可選的靜態型別檢查器，支援編譯期型別檢查。 Python 3 內建型別小結 型別 可變性 描述 語法例子 bool 不可變 布林值，有表示值 False 和 True 的兩個物件。作為整數型別 numbersIntegral 的子型別，它們在幾乎所有上下文中，表現得如同 0 和 1，除了在轉換成字串時轉換為 False 和 True 之外。 int 不可變 整數，其大小在理論上無限制，實際上受限於記憶體。 float 不可變 雙精度浮點數，確切精度依賴於機器。一般實現為 IEEE 754 標準 binary64 浮點數，它有 53 個二進位制有效數位精度。 complex 不可變 複數，即分別表示實部與虛部的兩個雙精度浮點數的有序對。 range 不可變 數的序列，通常用在 for 迴圈中指定迴圈次數。 str 不可變 字串，即 Unicode 程式碼點序列。字串中的程式碼點都在範圍 U0000U10FFFF 之內。Python 沒有 char 型別，這些程式碼點都表示為長度為 1 的字串物件。 Wikipedia Wikipedia Spanning multiple lines bytes 不可變 位元組序列，其專案是 8 位位元組，用範圍 0 x 256 的整數表示。 bytearray 可變 位元組序列，其專案是 8 位位元組，用範圍 0 x 256 的整數表示。 list 可變 列表，可以包含任意的 Python 物件。 tuple 不可變 元組，可以包含任意的 Python 物件。只有一個專案的元組，可以透過向表示式字尾一個逗號來形成。 dict 可變 鍵 值對的關聯陣列（常稱為字典），即由任意索引集合來索引的物件的有限。不可接受為鍵的值，是列表或字典，或按值而非物件同一性比較的其他可變型別的值，其雜湊值不能保持恆定。 set 可變 無序有限，包含唯一性的不可變的物件，它們不能用任何下標來索引。 frozenset 不可變 無序有限，包含唯一性的不可變的物件，它們不能用任何下標來索引。 typesEllipsisType 不可變 這個型別有一個單一物件作為值，它透過文字 或內建名字來訪問，它的真值為真。它用於 NumPy 多維陣列索引。 typesNoneType 不可變 這個型別有叫做 None 的一個單一物件 Null 作為值，它被用來指示值的缺席，比如不返回任何東西的函式返回它，它的真值為假。 typesNotImplementedType 不可變 這個型別有一個單一物件 NotImplemented 作為值。數值方法和細化比較方法，在它們仍未對提供的運算元實現這個運算之時，返回這個值。它不應該在布林值上下文中求值。 除了各種資料型別，Python 直譯器還內建了很多其他型別，包括可呼叫型別：使用者定義函式、例項方法、生成器函式、協程函式、非同步生成器函式、內建函式、內建方法、類、類方法；模組，定製類，類例項，IO 物件（也叫做檔案物件），和暴露給使用者的一些內部型別：程式碼物件、框架物件、溯回物件、切片物件、靜態方法物件、類方法物件。 算術運算 Python 的算術運算，使用平常的符號 、、、 和模除 。它還有下取整除法算符 、指數算符 和矩陣乘法算符 。二元運算先將兩運算元轉為共同型別，加法、減法、乘法、下取整除法和指數運算的結果也採用此型別，比如 53 125 而 905 30。這些算符就像在傳統數學中一樣運算，具有同樣的優先順序規則，中綴算符 、，還可以分別表示取原數和取相反數的一元算符。 被稱為 真除法 的 的表現，隨著版本不同而有著顯著變化。自 Python 30 以來， 總是產生浮點數結果，包括兩個整數相除，比如 52 25；而在下取整除法 中，兩個整數相除產生整數，比如 73 2 而 753 20。 下取整除法 的修約是朝向負無窮的。向下取整能增加一致性，例如這意味著等式總是為真。模除 所得出的餘數的符號同於除數，比如 43 2 而 43 2。其它多數程式語言比如 C99 採用截尾取整規則，餘數的符號同於被除數。模除運算結果餘數的定義，確使等式對於 a 和 n 分別為正數或負數的情況都是有效的。餘數可以為負數，顯著不同於在數學中的歐幾里得除法規則下，餘數總是非負數的情況。 Python 提供了 round 內建函式，用於把一個浮點數修約成最近的整數，自 Python 30 以來，為了打破平局它採用了 IEEE 754 的約半成偶規則：round 15 和 round 25 都產生 2。 Python 允許由比較運算連結起來的布林表示式，表現得如在數學中常用的一樣。比如表示式 a b c，測試 a b and b c。C 語言將它解析為 a b c：即首先求值 a b，其結果為 0 或 1，接著把這個結果比較於 c。 Python 對所有整數運算，使用任意精度算術。在 decimal 模組中的 Decimal 類，提供，具有使用者可按需要而更改的預設 28 個十進位制有效數位精度，並有多種修約方式。在 fractions 模組中的 Fraction 類，提供任意精度的有理數。第三方庫 gmpy2，提供了到任意精度計算庫 GMP、和 MPC 的介面。 除了求絕對值函式 abs 列入內建函式之外，大多數數學函式，處於 math 和 cmath 模組內。前者用於實數運算，而後者用於複數運算。由於 Python 有著廣泛的數學庫，特別是第三方庫 NumPy 進一步擴充套件了固有能力，Python 經常被用作科學指令碼語言，來處理如數值資料處理和操縱等問題。 標準庫 Python 擁有一個強大的標準庫。Python 標準庫包括瞭如下功能： 內建函式 內建常量 內建型別 內建例外 Python 執行時服務 定製 Python 直譯器 匯入模組 Python 語言服務 服務 服務 資料型別 數值和數學模組 函數語言程式設計模組 檔案和目錄訪問 資料持久化 資料壓縮和存檔 檔案格式 加密服務 通用作業系統服務 MS Windows 專有服務 Unix 專有服務 併發 網路和程序間通訊 網際網路資料處理 標記處理工具 網際網路協議及其支援 多媒體服務 國際化 程式框架 Tk 圖形使用者介面 開發工具 除錯和分析 軟體打包和 程式程式碼例項 一個在標準輸出裝置上輸出 Hello World 的簡單程式，這種程式通常作為開始學習程式語言時的第一個程式，可將如下程式碼錄入純文字檔案並隨意命名比如 program01py，然後執行這個程式 python3 program01py： print Hello world Python 也可以單步直譯執行。執行 Python 直譯器進入互動式命令列的環境，你可以在提示符號 旁輸入 print Hello world，按 Enter 鍵輸出結果： print Hello world Hello world 計算正數的階乘的程式程式碼： n int input 輸入一個數，就會印出其階乘 if n 0 raise ValueError 錯誤，請輸入一個非負整數 fact 1 for i in range 2 n 1 fact i print fact 注意，在 Python 30 及以上版本中，print 是個函式，需要在要列印的字串前後加上圓括號；在 Python 26 以下版本中，print 是一個關鍵字和命令而不加圓括號。 實現 Python 是一門跨平臺的指令碼語言，Python 規定了一個 Python 語法規則，根據該規則可編寫 Python 直譯器。Python 屬於動態語言，其官方實現將 Python 程式編譯成中間形式的位元組碼，並接著在它的虛擬機器上執行 ，相較於 CC 和 java 的等編譯語言而言執行速度較慢。 活躍開發的實現 CPython：官方的直譯器，需要區別於其他直譯器的時候才以 CPython 稱呼。CPython 預設採用全域性直譯器鎖（GIL），以確保在任何時刻只有一個執行緒執行 Python 位元組碼；一些擴充套件模組被設計為在進行計算密集任務時釋放 GIL，還有在進行 IO 時總是釋放 GIL。 PyPy：用 RPython 編寫的 Python 實現，相容至 CPython 版本 310 和 27，它採用了，預設支援 stackless 模態。 MicroPython：為微控制器而最佳化的 Python 3 變體，它實現了完整的 Python 34 語法，和補充自版本 35 的 asyncawait 關鍵字，和後來版本的一些選定特徵；它提供了實現 Python 標準庫模組功能子集的內建模組，和特定於微控制器的一些模組。是開發的 MicroPython 分叉。 Codon：使用了 LLVM 的高效能 Python 編譯器，它將 Python 程式碼編譯成本機機器程式碼，不帶有任何執行時開銷並且支援本機多執行緒，它的語義在資料型別等方面上與 CPython 有所不同，它由 MIT CSAIL 的研究人員開發。 Pyodide：基於 WebAssemblyEmscripten 的用於瀏覽器和 Nodejs 的 Python 釋出，支援任何在 PyPI 上 wheel 形式的純 Python 包，並且已經移植了很多具有 C 語言擴充套件的包。 RustPython：用 Rust 編寫的 Python 直譯器 ，它可以嵌入到 Rust 應用程式中從而將 Python 用作指令碼語言，還可以被編譯成 WebAssembly 從而在瀏覽器中執行 Python 程式碼。 Brython：用 JavaScript 編寫的在瀏覽器中執行的 Python 實現，具有到 DOM 元素和事件的介面。 到其他語言的交叉編譯器 Cython：最佳化靜態編譯器，將 Python 超集編譯成 C 語言或 C。Cython 補充支援呼叫 C 語言函式並且在變數和類特性上宣告 C 語言型別，還支援以 OpenMP 為後端的本機多執行緒並行。 Numba：使用 LLVM 的 JIT 編譯器，將包括很多 NumPy 函式的聚焦數值計算的 Python 子集，翻譯成快速的機器碼，它為在 CPU 和 GPU 上並行化 Python 程式碼提供了大量選項。 mypyc：將 Python 模組編譯成 C 擴充套件的編譯器，它使用標準的 Python 型別提示生成快速程式碼。mypyc 是 mypy 發行的可選依賴，它使用 mypy 進行型別檢查和型別推論。 Pythran：將聚焦於科學計算的 Python 子集編譯成 C11 的，它依賴於 Boost 和 xsimd 庫，將標註了介面描述的 Python 模組編譯為本機共享庫模組，能利於上多核和 SIMD 指令單元。 ：用 Python 編寫的到 C11（或替補為 C03）的最佳化編譯器，它依賴於 CPython 的 libpython 庫，能完成嵌入所有模組的程式編譯、擴充套件模組及包編譯和獨立模態程式釋出。 Transcrypt：用 Python 編寫的 Python 39 到 JavaScript 編譯器，用於在瀏覽器中執行 Python 程式碼，它被預先編譯為高可讀性且高效的 JavaScript 程式碼。 ：將 Python 編譯成 Verilog 或 VHDL。 其他實現舉例：Jython，它是用 Java 實現的 Python 27。IronPython，它是建造在 DLR 之上的 Python 27 和 Python 34 實現。Stackless Python，它是實現的 CPython 38 分叉。Pyston，它是具有 JIT 等效能最佳化的 CPython 3812 的分叉。Pyjion，將 Python 程式碼編譯成本機 CIL 的 CPython 310 的 JIT 擴充套件。Cinder，它是 Meta 孵化器釋出的具有包括 JIT 等很多最佳化的 CPython 310 分叉。 開發環境 通用文字編輯器 很多並非整合開發環境軟體的文字編輯器，也對 Python 有不同程度的支援，並且加上專門為 Python 設計的編輯器外掛也會有很高的可用性。 Visual Studio Code Atom Eclipse emacs SlickEdit TextMate Vim Sublime Text EditPlus UltraEdit PSPad Notepad 專用開發環境 適用於 Python 的整合開發環境（IDE）軟體，除了標準二進位制釋出包所附的 IDLE 之外，還有許多其他選擇。其中有些軟體設計有語法著色、語法檢查、執行除錯、自動補全、智慧感知等便利功能。由於 Python 的跨平臺出身，這些軟體往往也具備各種作業系統的版本或一定的移植性。 IDLE：Python 標準 IDE，一般隨 Python 而安裝，支援較少的編輯功能，除錯功能也比較弱。 Eric：基於 PyQt 的自由的 IDE，支援自動補全、智慧感知、自動語法檢查、工程管理、svnmercurial 整合、自動單元測試等功能，具有可擴充套件的外掛系統，透過可選外掛支援 Git 整合。除錯功能與 Visual Studio 和 Eclipse 類似。 Spyder：開源的跨平臺科學計算 IDE。 ：功能較全的開源 IDE，使用 Delphi 開發。 PyCharm：由 JetBrains 公司出品，具備一般 IDE 的功能，比如除錯、語法高亮、Project 管理、程式碼跳轉、智慧提示、自動完成、單元測試、版本控制等等，另外，它還提供了一些功能用於 Django 開發，同時支援 Google App Engine，還支援 IronPython。它是商業軟體，但也具有社群版和教育版。 ：適用於程式設計初學者的 IDE。 ：商業軟體，有免費的功能有限的 Wing 101。 第三方擴充套件包 Python 社群提供了大量的功能覆蓋眾多領域的第三方模組，其使用方式與標準庫類似。第三方模組可以使用 PythonCython 或者 C 語言編寫。軟體工具 SWIG 和，透過定義介面檔案或規定檔案的方式，可以將 CC 編寫的程式庫包裝為 Python 模組。Python 直譯器本身也可以被整合到其它需要指令碼語言的程式內。 Python 包索引是公開的軟體包線上倉庫。pip 是官網推薦的以安全方式安裝 Python 應用及其依賴軟體包的最流行工具。要安裝在整個作業系統範圍內共享的 Python 包，現在需要透過作業系統的軟體包管理系統。要將特定於應用的依賴包隔離於共享的 Python 安裝，可以使用標準庫的 venv 或第三方工具 virtualenv 建立虛擬環境；第三方工具 pipenv，能自動為使用者專案建立和管理虛擬環境，並在安裝 卸裝軟體包的時候，向此專案的 Pipfile 檔案增加 移除這個軟體包。 網路服務 Python 定義了 WSGI 標準應用介面，來協調 HTTP 伺服器與基於 Python 的 Web 程式之間的溝通。比如，透過模組，Apache 可以執行用 Python 編寫的 Web 程式。Zope 是著名的用 Python 編寫的開源的 Web 應用伺服器。Tornado 是用 Python 語言寫成的非阻塞式 web 伺服器，也是輕量級的 Web 框架。 Python 對於各種網路協定的支援很完善，因此適用於編寫伺服器軟體、網路爬蟲等 Web 開發。用 Python 編寫的一些 Web 框架，有助於輕鬆地開發和管理複雜的 Web 程式。著名的第三方 Web 框架和函式庫： Django：MTV 架構的 Web 開發框架，注重元件的重用性和 可插拔性、快速開發和 DRY 法則。 Pyramid：極簡主義的 Web 框架，不預定持久化方式。 Flask：微 Web 框架，不要求特定的工具或庫。 PyScript：建立在瀏覽器內的 Python 應用的框架，這些應用能使用 HTML 介面和已編譯成 WebAssembly 的 Pyodide 或 MicroPython，以及當代 Web 技術。 Twisted：事件驅動的網路程式設計框架。它支援多數標準的網路協定（包含客戶端和伺服器），並且提供了多種工具，適用於編寫高效能的伺服器軟體。 Requests：適合於常人使用的 HTTP 庫，封裝了許多繁瑣的 HTTP 功能，極大地簡化了 HTTP 請求所需要的程式碼量。 Beautiful Soup：用來解析 HTMLXML 的一個簡單易用 Python 包。 uvloop：是對內建 asyncio 事件迴圈的快速的、直截了當的替代者，它用 Cython 實現並在底層使用了 libuv。 aiohttp：基於 asyncio 的 HTTP 客戶端和伺服器二者。 圖形使用者介面 Python 本身包含了 Tkinter 庫，它是 Python 的業界標準 GUI 並被整合進入了 IDLE。Tkinter 基於了 Tcl 命令工具，能夠支援簡單的 GUI 開發。但是為了讓所開發的軟體執行速度更快，並與使用者的桌面環境更契合，人們一般會選擇採用第三方 GUI 庫或框架。著名的第三方 GUI 庫： PyQt：Qt 的 Python 繫結庫，由 Riverbank Computing 公司自從 1998 年發行，採用 GPL 許可證或商業許可證。 PySide：Qt 的 Python 繫結庫，由 Qt 公司自從 2009 年發行，採用 LGPL 許可證。 PyGObject：替代了 PyGTK，它是為 Python 程式訪問基於 GObject 的庫而提供的包裝庫，GObject 是 GTK、和 GStreamer 等庫使用的物件系統。 Kivy：用於開發多點觸控應用軟體的開源 Python 庫，採用了自然使用者介面（NUI）。 WxPython：GUI 程式設計框架 wxWidgets 的 Python 包裝庫，它與 MFC 的架構相似。 PySimpleGUI：將 Tkinter、Qt、WxPython 和 Remi 的 GUI 框架變換成簡單的介面。 Gooey：將幾乎所有 Python 3 控制檯程式用一行程式碼轉變成 GUI 應用。 Dear PyGui：快速而強力的具有極小依賴性的 GUI 工具箱。 pywebview：輕量級跨平臺的對構件的包裝器，允許在其本地 GUI 視窗中顯示 HTML 內容。 資料科學 重要的資料科學用第三方軟體庫有： NumPy：Python 的基礎性的科學計算軟體庫，它提供了強力的多維陣列物件，廣播式陣列運算，整合 CC 和 Fortran 程式碼的工具，較為有用的線性代數、傅立葉變換和隨機數功能。 SciPy：用於數學、科學和工程的 Python 軟體庫，它以 NumPy 的多維陣列作為基本資料結構，所包含的模組針對了：統計、最最佳化、數值積分、常微分方程求解、插值、線性代數、傅立葉變換、訊號處理、影像處理等。 ：NumPySciPy 相容的 GPU 加速的陣列庫，它可在 NVIDIA CUDA 或 AMD ROCm 平臺上充當其直截了當的替代者，來執行現存的 NumPySciPy 程式碼。 matplotlib：基於 NumPy 的綜合性庫，用於建立靜態的、動畫的和互動式的資料視覺化。 pandas：用於資料分析和資料操縱的軟體庫，它建造在 NumPy 基礎上，提供了加標籤資料結構 資料幀，和統計函式等。它的預設繪圖後端是 matplotlib，還可以擴充套件上第三方後端。 ：伸縮範圍從筆記型電腦至計算機叢集的平行計算庫，它提供的使用者介面映象了 PyData 生態系統中 pandas、scikitlearn 和 NumPy 的 API。 資料視覺化 主要的資料視覺化軟體庫及儀表板框架有： VisPy：高效能互動式 2D3D 資料視覺化庫，它透過多種後端 OpenGL 庫之一來顯示非常大的資料集，並提供叫做 gloo 的受用 NumPy 的 Python 風格 OpenGL ES 20 介面。 glumpy：用於科學資料視覺化的快速、可伸縮的 Python 庫，它基於了 NumPy 和 OpenGL 繫結庫 PyOpenGL。 seaborn：基於 matplotlib 的資料視覺化庫，它提供了繪製統計圖形的高層介面。 VegaAltair：建造在 VegaLite JSON 規定之上的宣告式統計視覺化庫。 Bokeh：針對現代 Web 瀏覽器的互動式資料視覺化庫，它在大型或的資料集上提供高效的互動性。 plotly：互動式開源的基於瀏覽器的圖形繪製庫，它是建造在 plotlyjs 之上的宣告式圖表庫。 Dash：資料應用和儀表板框架，它可將現代使用者介面元素如下拉選單、和圖形，直接連結至分析型 Python 程式碼，它由公司出品，基於了 React、Flask 和 plotlyjs。 Panel：和 Web 應用框架，它能無縫的集成於 PyData 生態系統，提供互動式資料表格和視覺化等功能，它是 HoloViz 生態系統的成員，這個工具組還包括了：hvPlot、HoloViews、GeoViews、Datashader、Lumen、Param 和 Colorcet。 Streamlit：迅速將 Python 指令碼轉變為可共享 Web 應用的框架。 Voilà：將 Jupyter Notebook 轉變為獨立的 Web 應用的框架。 機器學習 基礎性的機器學習軟體庫及框架有： scikitlearn：機器學習軟體庫，它提供的功能包括：監督學習中的分類和迴歸，無監督學習中的聚類和降維，還有模型選擇和。它基於了 NumPy、SciPy、輕量級管道庫 Joblib 和執行緒池控制庫 threadpoolctl，其繪圖功能依賴於 matplotlib，還用到了、seaborn 和 plotly。 PyMC：基於從 Theano 分叉出的 PyTensor 的機率程式設計庫，它用於建立貝葉斯統計模型，並使用馬爾可夫鏈蒙特卡洛（MCMC）方法進行模型擬合。 TensorFlow：Google 開發的 端到端 開源機器學習平臺，它提供了 Python API，其中實現了 Keras API。Keras 現在是在 TensorFlow 2 上建立的深度學習高層 API。 PyTorch：Meta 在基礎上開發的開源的 Python 軟體包，提供了具有強大的 GPU 加速的張量計算，和建立在基於 tape 的自動微分系統上的深度神經網路。 JAX：Google 開發的開源機器學習框架，其核心是可任意組合的對數值純函式的變換，它結合了修改版本的針對 NumPy 的自動微分庫 Autograd，和 TensorFlow 中的加速線性代數庫 XLA，它使用 XLA 來在 GPU 和 TPU 上編譯和執行 NumPy 程式。 其它種類 pegen：Python 的 PEG 解析器生成器。 PeachPy：採用高層 Python 的可移植高效 x8664 彙編程式碼生成器。 llvmlite：輕量級的 LLVM 的 Python 繫結，用於編寫即時編譯器。 SymPy：支援數學符號運算的軟體庫，用於提供計算機代數系統。 SimPy：基於由 Python 生成器函式定義的程序的離散事件模擬框架。 ModernGL：不同於 PyOpenGL，ModernGL 是在 OpenGL 33 核心上的 Python 包裝器，它簡化了簡單圖形應用如科學模擬、遊戲和使用者介面的建立。 PyCUDA：不同於 Nvidia 的 cudapython，PyCUDA 提供對 CUDA API 的 Python 風格訪問。 PyOpenCL：PyOpenCL 提供對 OpenCL API 的 Python 風格訪問，例如光滑粒子流體動力學框架 PySPH 的效能關鍵部份用 Cython 和 PyOpenCL 實現。 Kompute：通用 Vulkan 計算框架，針對 C 和 Python。 Taichi：採用同 Python 幾乎一樣語法的指令式並行程式語言，它嵌入在 Python 之中並使用即時編譯器框架如 LLVM，將計算密集的 Python 程式碼轉變成本機 GPU 或 CPU 指令。 SQLAlchemy：Python 的 SQL 工具包和採用資料對映器模式的物件關係對映器（ORM）。 Graphene：GraphQL 框架，支援各種資料來源如 SQLAlchemy、Mongo、Django 和定製 Python 物件等。GQL 是常用來與之配合的 GraphQL 客戶端 Python 庫。 ：是基於 Python 的影像處理軟體庫，它支援廣泛的圖形檔案格式，分叉於已終止的 PIL。 pypdf：能夠分割、合併、修剪和轉變 PDF 檔案的 Python 軟體庫。 PyFilesystem2：Python 的檔案系統抽象層，將在歸檔、記憶體和雲端儲存等之中的檔案和目錄，像在本地驅動器中一樣容易的處置。 Fabric：經由 SSH 遠端執行 shell 命令的高層庫，它產生有用的 Python 物件作為回饋。 Prefect：現代工作流程編排框架，它易於建造、排程和監控健壯的資料流水線。 pygame：開發影片遊戲的 Python 軟體庫，基於了 SDL 軟體庫。視覺小說引擎 RenPy 建造在 pygame 之上。 pyglet：Python 編寫的面向物件的遊戲和多媒體庫，利用了 FFmpeg 軟體庫並需要 OpenGL 33。2D 街機遊戲開發庫 Arcade 基於了 pyglet，它還利用了建造在 2D 物理引擎之上的 Pymunk。 ：開源遊戲引擎，包括了圖形、音訊、IO、碰撞偵測和其他與 3D 遊戲有關的功能，使用 Python 作為遊戲開發語言。 pythonnet：可以近乎無縫的整合NET 通用語言執行庫（CLR）的程式包。 PyInstaller：將 Python 應用和它的依賴項捆綁成一個單一的包，從而不需要安裝 Python 直譯器或任何模組就可以執行應用。 應用 在很多作業系統裡，Python 是標準的系統元件，它被列入 Linux 標準規範之中。大多數 Linux 發行版和 macOS 都集成了 Python，可以在終端模擬器或下直接執行 Python。第三方工具 pipx，可以將 Python 應用安裝於隔離的環境中並在其中執行它。 雖然 Python 可被粗略地分類為指令碼語言，Python 的支持者較喜歡稱它為一種高階動態語言，常像 膠水 一樣被用來連線軟體元件，已經顯著的區別於 Unix shell、Windows PowerShell 這樣的語言。基於 Python 的 xonsh，是跨平臺的、青睞 Unix 的 shell 語言和命令列介面。 應用程式 一些 Linux 發行版，使用 Python 語言編寫安裝器，比如 Ubuntu 的 Ubiquity 和 Fedora 的 Anaconda；或使用它編寫軟體包管理系統，比如 Gentoo 的 Portage。如下著名應用使用 Python 編寫或將它作為嵌入式指令碼： IPython：以多種程式語言進行互動式計算的命令 shell 和 Jupyter 的核心，最初為 Python 開發，它提供了內省、富媒體、shell 語法、和歷史。 Conda：跨平臺的、語言無關的二進位制包管理器，它被 Anaconda 發行採用。 SCons：軟體建造工具，它可代替 make 構建編譯程式。 ：使用 Python 語言編寫的 WSGI Web 伺服器。 Plone：基於 Zope 的內容管理系統。 ：基於 Django 框架的內容管理系統。 ：基於 scikitlearn 和 pandas 的開源機器學習和資料視覺化軟體，由盧布林雅那大學開發，利用了 PyQt5 和基於 Blink 的 PyQtWebEngine，透過廣大多樣的工具箱來建造資料分析工作流程。 SageMath：涵蓋許多數學功能的應用軟體，它建造在 NumPy、SciPy、matplotlib、SymPy、Maxima、、FLINT、R 等開源軟體包之上。 ：用 Python、PyQt 和 NumPy 寫成的科學繪圖軟體，可生成出版水準的 PDF 或 SVG 輸出。 ：基於 VTK 的應用程式和庫，用於互動式科學資料視覺化和採用 Python 的 3D 繪圖。 Blender：開源 3D 繪圖軟體，使用 Python 作為建模工具與 GUI 語言。 Inkscape：開源的 SVG 向量圖形編輯器，使用 Python 用於外掛。 Pitivi：用 Python 開發的基於 GStreamer 的影片編輯軟體。 人工智慧 經由 Python 開發了眾多的人工智慧模型和作為其支撐的軟體庫： Ray：對人工智慧及 Python 應用的執行規模進行伸縮的統一框架，由 Anyscale 公司開發。它構成自一個核心的分散式執行時系統，和加速機器學習工作負載的 AI 軟體庫。 Kornia：基於 PyTorch 的可微分計算機視覺軟體庫。 ：用 Python 和 Cython 開發的工業級實力的自然語言處理軟體庫。 Argos Translate：基於 OpenNMT 的離線神經機器翻譯軟體庫。 Stable Diffusion：用 Python 開發的深度學習文字到影像生成模型，基於了 CUDA、PyTorch、VAE、UNet 和 OpenAI 的 CLIP，其程式碼和模型權重已公開發布，可以在大多數配備有適度 GPU 的消費類計算機硬體上執行。 Transformers：為下載和訓練前沿的預訓練模型提供 API 和工具，由 Hugging Face 開發，支援在 PyTorch、TensorFlow 和 JAX 之間的框架互操作性。 Gradio：它是一個 Python 庫，允許快速建立和分享用於機器學習模型、API 或任何任意 Python 函式的 Web 應用程式。使用 Gradio，可以構建互動式使用者介面，與各種機器學習框架相容。還可以使用 Gradio 以互動方式除錯模型、從使用者獲取反饋，並透過自動生成的可共享連結輕鬆部署模型。Python library for easily interacting with trained machine learning models httpspypiorgprojectgradio LangChain：它是一個應用框架，旨在簡化使用大型語言模型的應用程式。作為一個語言模型整合框架，LangChain 的用例包括文件分析和總結摘要，程式碼分析和聊天機器人。 LangChain 提供了一個標準介面，用於將不同的語言模型（LLM）連線在一起，以及與其他工具和資料來源的整合。 社群流行 自從 2003 年，Python 始終排行於前十最流行程式語言，在 2021 年 10 月它首次達到了第一名最流行語言（居於 C 和 Java 之前），並被選為 2007 年、2010 年、2018 年、2020 年和 2021 年的年度程式語言。它有如下著名的社群： PyCon：各地社群舉辦的會議，通常每年舉辦。各社群在會議中討論 Python 相關的議題。 Python Discord：參與者眾多的 Python 社群。 ：由女性社群發起的社群，主要注重於發展 Python 的女性程式設計社群。 ：使用 Django 網頁設計框架，推廣使用 Python 進行網頁設計的技術。 影響的語言 Python 的設計和哲學已經影響了很多其他程式語言： Boo：使用了縮排、類似的語法和類似的物件模型。 ：使用了縮排和類似的語法。 Coconut：在 Python 語法之上增加了用於函數語言程式設計的新特徵的 Python 變體。 CoffeeScript：有受 Python 啟發的語法。 ECMAScriptJavaScript：從 Python 借鑑了迭代器和生成器。 GDScript：內置於 Godot 遊戲引擎的非常類似 Python 的指令碼語言。 Genie：基於 Vala 編譯器的具有近似 Python 語法的語言。 Go：其設計原則受到了 Python 的可讀性與易用性的啟發，享有相同風格的陣列分片語法。 Groovy：受到 Python 等動態型別語言的影響。 Julia：在表達高階數值計算的方式和支援通用程式設計上借鑑了 Python 等語言。 Kotlin：融合了 Python 和 Java 特徵，極小化了樣板程式碼而增加了開發效率。 Mojo：基於並設計為 Python 語言的超集。 Nim：使用縮排和類似的語法。 Ruby：主要從 Python 等語言中借鑑了特徵。 ：用在 Bazel 軟體中有受 Python 啟發語法的語言。 Swift：有受 Python 啟發的語法。 程式碼示例 註釋 延伸閱讀 參閲 程式語言列表 Python 語法及語義 Python 的歷史 外部連線 Awesome Python Real Python Tutorials programingz － Learn Python Programming w3schools － Python Tutorial ItsMyCode－ Learn Python Programming Codecary － Learn Python Programming dainikchorcha － Learn Python Programming Tutlane Learn Python Online Brmgha Learn Challenges Python Online AlmaBetter Python Tutorial Category 指令碼語言 Category 面向物件的程式語言 Category 面向文字程式語言 Category 基於類的程式語言 Category 荷蘭發明 Category1991 年建立的程式語言 Category 開源軟體 CategoryPython 軟體 CategoryPython 庫 CategoryPython 科學庫