Python

Python（UK；US），是一種廣泛使用的解釋型、高級和通用的編程語言。Python支持多種編程範型，包括結構化、過程式、反射式、面向對象和函數式編程。它擁有動態類型系統和垃圾回收功能，能夠自動管理內存使用，並且其本身擁有一個巨大而廣泛的標準庫。它的語言結構以及面向對象的方法，旨在幫助程序員為小型的和大型的項目編寫邏輯清晰的代碼。
吉多·範羅蘇姆於1980年代後期開始研發Python，作為ABC語言的後繼者，它也可以被視為採用了叫做M-expression的中綴表示法的一種LISP方言。吉多·範羅蘇姆於1991年首次發佈 Python 0.9.0。Python 2.0於2000 年發佈並引入了新功能。Python 3.0於2008年發佈，它是該語言的主要修訂版，並非完全向後兼容。Python 2於2020年隨2.7.18版停止支持。
Python的設計哲學，強調代碼的可讀性和簡潔的語法，尤其是使用空格縮進來劃分代碼塊。相比於C語言或Java，Python讓開發者能夠用更少的代碼表達想法。
Python解釋器本身幾乎可以在所有的操作系統中運行，它的官方直譯器CPython是用C語言編寫的。Python是一個由社群驅動的自由軟件，目前由Python軟件基金會管理。Python是最受歡迎的編程語言之一。

**歷史**
Python的創始人吉多·範羅蘇姆，在1982年至1995年間，參與了荷蘭數學和計算機科學研究學會多個項目的工作。1989年的聖誕節期間，他決心開發一個新的腳本解釋程式，作為ABC語言的繼承者，並且用它替代Unix shell和C語言來進行系統管理，擔負與Amoeba操作系統之間的交互操作並進行例外處理。他是BBC電視劇《Monty Python的飛行馬戲團》的愛好者，所以選取了Python作為這個編程語言的名字。範羅蘇姆作為Python的主要開發者，獨自擔負這個項目的發展決策者職責，直到2018年7月12日，他宣佈從終身仁慈獨裁者（BDFL）的職位上“永久休假”。他在2019年1月至11月參與了第一屆五人掌控委員會繼續領導項目發展。
在1991年2月，範羅蘇姆在alt.sources上發佈了最初代碼（標記為版本0.9.0）dead-url=no ，這時就已經存在了帶繼承的類、例外處理、函數和核心類型list、dict、str等。在這個最初發行中就有了從Modula-3引進的模塊系統，和例外處理機制。在1994年1月，Python版本1.0發佈，其主要新特徵是由Amrit Prem提供的函數式編程工具lambda、map、filter和reduce。受Modula-3啟發，Python 1.1介入了缺省參數值，Python 1.3介入了關鍵字參數。Python 1.4介入了對複數的內建支持，還包含了採取名字修飾的一種基本形式的數據隱藏。
在2000年10月，Python 2.0發布，它從函數式編程語言Haskell中引進了列表推導式，並且支持了Unicode，還向垃圾回收系統增加了環檢測算法。Python 2.1支持了靜態嵌套作用域和閉包。Python 2.2進行了重大革新，將Python中用C語言寫成的類型，和用Python語言寫成的類，統一成在同一個層級中，使得Python的對象模型成為純粹而一致的對象模型；還介入了迭代器，受CLU和Icon啟發的生成器，和描述器協議。Python 2.3介入了從Dylan引進的方法決定次序。Python 2.4介入了集合類型，和函數修飾器。Python 2.5介入了with語句，並在官方實現中介入了抽象語法樹。
在2008年12月，Python 3.0發布，它對語言做了較大修訂而不能完全後向兼容，儘管提供了進行自動轉換的2to3實用工具，仍有大量現存代碼不能移植，故而Python 2.7的產品壽命結束延期至2020年元旦。Python 3.4介入了異步I/O模塊。Python 3.5介入了類型提示，和採用async/await語法的協程。Python 3.8介入了賦值表達式。
在2020年10月，Python 3.9介入了內建的針對容器類的泛化別名（types.GenericAlias）類型dead-url=no，並在官方實現中介入了新的語法解析器。Python 3.10介入了結構式模式匹配，和內建的聯合類型（types.UnionType）dead-url=no。Python 3.11對官方實現進行了優化提速。Python 3.12介入了類型參數語法和type語句，並廢棄或移除了一些過時的模塊和功能。Python 3.13介入了新的交互式解釋器，並實驗性的支持了在自由線程模態下運行和即時編譯器。
每個版本首次發行後，享有2年的完全支持，隨後是3年的安全支持。當前只有Python 3的穩定版本3.12與3.13正在被完全支持，但仍提供對3.9、3.10和3.11版本的安全性修正。10
在2024年12月，活躍的Python核心開發者，選舉Pablo Galindo Salgado、Barry Warsaw、Emily Morehouse、Gregory P. Smith和Donghee Na，為2025年度“掌控委員會”的五位成員來領導這個項目。

**特徵與設計哲學**
Python是多範型編程語言。它完全支持結構化編程和麵向對象編程，還有很多特徵支持函數式編程和元編程比如元對象協議（元類和魔術方法）。通過擴展還可以支持很多範型，包括面向方面編程、契約式設計和邏輯編程。
Python使用動態類型，在內存管理上採用的垃圾回收器基於了引用計數，並且結合了檢測環引用的分代垃圾回收優化。它的特徵還有動態名字解析（late binding），即在程序執行期間綁定方法和變量的名字。
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還可以通過Foreign function interface如標準庫中的ctypes等，來提供C語言兼容數據類型，並訪問動態鏈接庫或共享庫中的函數，從而對用其他語言編寫的程式進行集成和封裝。
在Python的官方實現CPython中，一般避開不成熟的或者對非重要部位的加快運行速度的優化。在某些對運行速度要求很高的情況，可以使用具備JIT技術的Python實現或安裝JIT擴展模塊。

**語法和語義**
Python為了讓程式碼具備高度的可閱讀性，在設計時盡量使用了其它語言常用的符號和英文單字。

**行結構**
Python支持使用反斜槓作為行接續符，將多個物理行合成為一個邏輯行。在圓括號、方括號或花括號之中的表達式，可以分裂跨越多於一個物理行而不使用反斜槓，這被稱為“隱式行接續”。註釋開始於並非string literal一部份的一個井號#，並結束於物理行結尾；註釋標示邏輯行的結束，除非已受制於隱式行接續規則；註釋在語法上被忽略。
簡單語句包含在一個單一的邏輯行之內，Python支持使用分號作為分隔符，將多個簡單語句合併入語法意義上的一行之中cite web|url=https://docs.python.org/3/reference/grammar.html|title=The Python Language Reference － 10. Full Grammar specification|quote=simple_stmts:     simple_stmt !';' NEWLINE  # Not needed, there for speedup     ';'.simple_stmt+ ';' NEWLINE|access-date=2023-02-17|archive-date=2023-06-06|archive-url=https://web.archive.org/web/20230606220648/https://docs.python.org/3/reference/grammar.html|dead-url=no。

**縮排**
Python語法中的複合語句，包含（成組的）其他語句；它們以某種方式影響或控制這些其他語句的執行。Python的複合語句包含一個或多個子句（clause），子句構成自一個頭部（header）和一個套件（suite）。特定複合語句的子句頭部都在同樣的縮排層級上，每個子句頭部開始於一個唯一標識關鍵字，並結束於一個冒號。套件是這個子句所控制的一組語句，套件有兩種形式，可以是與頭部在同一行上的一個或多個由分號分隔的簡單語句，它們跟隨在這個頭部的冒號之後；或者是在後續諸行上的一個或多個縮排的語句，只有這種套件形式可以包含嵌套的複合語句。
Python語言遵循越位規則，利用縮排來形成語句套件，即語法意義上的塊。連續諸行的縮排層級，被用來生成語法解析器才能見到的INDENT和DEDENT記號statements: statement+statement: compound_stmt  simple_stmts……block:     NEWLINE INDENT statements DEDENT     simple_stmts|access-date=2023-02-17|archive-date=2023-06-06|archive-url=https://web.archive.org/web/20230606220648/https://docs.python.org/3/reference/grammar.html|dead-url=no，二者的作用相當於C語言家族的花括號，或Pascal語言家族的關鍵字begin和end。增加縮排就生成INDENT記號，減少縮排就生成DEDENT記號。根據PEP 8的規定，使用4個空格來表示每級縮排。
tab字符（從左至右）被替代為1至8個空格，使得直到tab之前的諸字符加上這些替代空格的字符總數，是8的倍數（這意圖同於Unix所用規則）。前導於第一個非空白字符的空格的總數，確定了這一行的縮排層級。縮排所用諸字符，不能使用反斜槓來拆分成多個物理行；直到第一個反斜槓之前的空白確定縮排層級。如果源代碼文件混合了tab和空格，並且在這種方式下縮排的意義依賴於一個tab相當於多少個空格，則這種縮排因不一致性而被報錯並拒絕。

**關鍵字**
Python有如下35個關鍵字；它們不能用作標識符：
內建常量True、False和None於Python版本3.0中成為關鍵字，關鍵字nonlocal介入於版本3.0，關鍵字async和await介入於版本3.5，並在版本3.7中成為正式關鍵字。
在Python中，將只在特定上下文中保留的標識符，稱為“軟關鍵字”：
*match、case和通配符_，介入於版本3.10，它們在與模式匹配語句有關的上下文中，可以在語法上充當關鍵字；但是這種區分只在語法解析器層次進行，並非在詞法分析記號化層次。
*type，介入於版本3.12，它用在type語句之中。

**標識符**
標識符就是名字，在ASCII範圍內（U+0001..U+007F），可用於標識符的字符為：大寫字母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文獻中經常使用的metasyntactic variable是spam和eggs而非傳統的foo和bar。

**語句**
Python的語句包括簡單語句：- 賦值語句，採用的中綴記號是等號=。賦值語句被用來將名字綁定（含重新綁定）到值，以及用來修改可變對象的特性或項目。
**Python還支持增廣賦值語句，將一個二元運算和一個賦值語句合併成一個單一語句，例如x += 1。
**Python支持“序列解包”（sequence unpacking）：在等號左側可以是一個表達式列表，其中每個表示式都可求值成能被賦值的東西（變量、可寫特性等）；在等號右側相應的是一個“可迭代”對象，它在被迭代時產生的值的數量，同於左手側可寫表達式的數量；賦值語句對這個對象進行迭代，將產生的每個值分別賦值給左側對應的可賦值者。在等號右側直接包裝出序列解包所要求的元組，就形成了並行賦值，可以同時給多個變量賦值，還可以交換兩個變量的值。 - 表達式語句，用來交互式的計算並寫出一個值，或者用來調用一個過程（即返回無含義結果的函數），在Python中過程返回值None。- global語句，是在整個當前代碼塊中成立的聲明，它意味著隨後列出的標識符被解釋為全局變量。- nonlocal語句，導致隨後列出的標識符，提及在除了全局作用域之外的最近包圍作用域中的先前綁定變量。- type語句，介入於版本3.12，聲明作為類型別名類型（typing.TypeAliasType）的實例的一個類型別名。- pass語句，充當NOP，表示此行為空，不執行任何操作。- assert語句，用於程式調適階段時測試執行條件是否滿足。- continue語句，越過這次迭代並繼續進行下個項目。- break語句，從循環中跳出。- return語句，用來從函數返回值。當函數執行到return語句時，它會停止執行並將指定的值返回給調用者。- raise語句，拋出一個例外。- yield語句，使用它從一個生成器中返回一個值。在版本2.5之前，信息只能單向的從生成器傳遞出來。
**自此版本2.5，重定義yield為表達式，通過它的返回值將信息傳遞進入生成器函數中，從而能夠支持協程功能。yield語句在語義上等價於加圓括號的yield表達式。
**自從版本3.3，提供了yield from語句，含有這個語句的“委託生成器”將其部份運算委託給另一個“子生成器”，將傳入信息遞送給它並直接回傳它產生的值。版本3.4在異步I/O框架中擴展了基於生成器的協程，這個擴展自從Python 3.8已經被棄用。
**自從版本3.6，介入了生成async for語句所用的異步迭代器的異步生成器。- import語句，導入一個模塊或包，它組合了兩種操作，查找指名的模塊，接著將找到的結果綁定到在局部作用域中的名字。導入語句有三種形式（下述語句樣本中的方括號表示其中內容為可選的）：
**import 模塊名字 as 別名，找到一個模塊，裝載它，如果有需要的話初始化它；在這個導入語句出現的作用域的局部名字空間中，定義一個名字或一些名字。
**from 模塊名字 import 定義1 as 別名1, 定義2 as 別名2, ...，找到、裝載、必需時初始化一個模塊；接著在局部名字空間中，增加到找到指名特性的引用。
**from 模塊名字 import *，在導入語句出現的作用域的局部名字空間中，綁定模塊中定義的所有公開的名字。- del語句，遞歸的進行刪除。
複合語句：- if語句，當條件成立時執行語句套件。它經常包含elif、else子句。- while語句，當條件為真時，重複執行語句套件。- for語句，遍歷列表、字符串、字典、集合等迭代器，依次處理迭代器中的每個元素。- match語句，用於模式匹配。- try語句，它經常包含except、else、finally子句，處理在程式執行中出現的異常情況。Python支持並廣泛使用例外處理，作為檢測錯誤狀況和程序中其他“例外”事件的方式，並提倡在可能出現錯誤狀況的任何時候都使用例外。習慣上訪問一個文件或資源不在使用之前進行測試，而是先行嘗試使用它，再捕獲訪問被拒絕引發的例外。Python 3.11介入了except*子句。- with語句，把一塊代碼包裹在一個上下文管理器之內。它允許了資源獲取即初始化（RAII）式行為，可替代常見的try/finally慣用法。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語句導致其列出的標識符，提及在非局部作用域內先前綁定的名字（即Non-local variable）。

**表達式**
Python中很多表達式與C語言和java類似，而另一些則與之不同。
*在Python中，算術運算的加法+、減法-、乘法*和取模%是與C語言和java相同的，但是除法的行為不同。在Python中有兩種除法，它們是下取整除法（或整數除法）//和浮點除法/。Python增加了指數算符**。自從Python 3.5，介入了矩陣乘法算符@，它已經用於了NumPy庫。
*在Python中，有如下必須用於整數的位運算：&與（AND），|或（OR），~非（NOT），^異或（XOR），>>右移, 左移。
*在Python中，有如下比較運算：大於>，小於，等於==，不等於!=，小於等於，大於等於 >=。==按值比較。Python的is、is not算符可以用來比較對象的同一性（按引用比較），也就是比較兩個變量是否引用了同一個對象。而in、not in用於判斷一個對象是否屬於另外一個對象。在Python中，比較是可以鏈接起來的，比如a 。- Python使用and、or、not表示邏輯運算與、或、非，不採用C語言和Java中所用的符號&&、
、!。
*在Python中，由逗號,分隔的一組表達式，叫做表達式列表。Python為構造列表、字典或集合，提供了叫做“展示”（display）的特殊語法，它們每個都有兩種方式：包容內容要麼顯式列舉出來；要麼通過一組循環和過濾指令計算而來，這叫做“推導式”。列表展示是包圍在方括號中的可以為空的一系列表達式，一個例子列表可寫為1,2,3。字典展示是包圍在花括號中的可能為空的一系列的鍵/數據項對。集合展示用花括號來指示，與字典展示的區別是缺少分隔鍵與值的分號。自從Python 3.5，增加了在表達式列表中的“可迭代解包”*，和在字典展示中的“字典解包”**。- Python支持列表推導式。Python 2.4將列表推導式擴展至更一般性的生成器表達式。Python 3.0又增補了字典推導式和集合推導式。
*在Python中，加圓括號形式（parenthesized form），是包圍在圓括號中的一個可選表達式列表。加圓括號的表達式列表產生的東西，就是這個表達式列表所產生的：如果這個列表包含至少一個逗號，它產生一個元組；否則它產生構成這個表達式列表的那個單一表達式。一個例子元組可寫為(1,2,3)。元組不是圓括號形成的，而是使用逗號形成的，在沒有歧義的情況下，元組的圓括號是可選的。空的圓括號對產生空元組對象。使用序列串接算符+來串接二個元組，產生包含給定元組二者的元素的一個新元組。- Python支持在序列對象（比如字符串、元組或列表）上的下標（subscription）表達式：a索引，和分片表達式：a開始:停止或a開始:停止:步長。下標索引是基於零的，負數是相對於結尾的。分片範圍自從“開始”索引，直到但不包括“停止”索引。分片的第三個參數叫做“步長”（step）或“間隔”（stride），允許元素被跳過和用負數指示反向。分片索引可以省略，例如a:，這返回整個列表的一個複本。分片的每個元素都是淺層複製的。- Python的條件表達式表示為x if c else y。意思是當c為真時，表達式的值為x，否則表達式的值為y。 在運算元的次序上不同於很多其他語言中常見的c ? x : y。- Python的匿名函數實現為lambda表達式。匿名函數體只能是一個表達式。- 自從Python 3.8，介入了賦值表達式，其記號是:=。它將一個表達式賦值給一個標識符，同時還返回這個表達式的值。賦值表達式在用作子表達式，即位於分片表達式、條件表達式、lambda表達式、關鍵字參數中的表達式和推導式中的if表達式之中，以及在assert和with語句之中的時候，必須圍繞著圓括號。在它們可以使用的所有其他地方，包括在if和while語句之中，都不要求圓括號。
Python中運算符具有優先級，下表中的運算符按照從最高到最低的次序列出。在相同單元格中運算符具有相同的優先級，它們從左至右結合，除了指數表達式和條件表達式從右至左結合之外：
Python提供了序列串接算符+和序列倍增算符*。自從Python 3.9，介入了字典歸併算符|和字典更新算符|=。
Python的文本序列類型，包括字符串str和字節序列bytes與bytearray。string literal有多種寫法，字符串對象有一個內建格式算符%：- 短字符串文字，由單引號'或雙引號"界定。不同於Unix shell、Perl和受Perl影響的語言，單引號和雙引號功能相同。這二種字符串都使用反斜槓\作為轉義字符。- 長字符串文字，是開始並結束於三個單引號或三個雙引號"""的序列。它們可以跨越多行，其功能就像shell、Perl和Ruby中的here文檔。
*字節文字總是前綴上一個b或B，它產生bytes類型的實例。它們只可以包含ASCII字符，具有128或更大數值的字節必須通過轉義來表達。- 字符串文字或字節文字都可選的能前綴上一個r或R，這叫做原始字符串。轉義序列不被解釋，因此在文字反斜槓常見的地方很有用，比如正則表達式和Windows風格的路徑。這種引述可比較於C#中的“@引述”。
*Python允許多個毗鄰的字符串文字或字節文字（它們以空白分界並可以使用不同的引述約定），在編譯時間於語法層面上串接起來。要在運行時間串接字符串，必須使用序列串接算符+。- Python中的“字符串格式”算符%，在功能上類同於C語言中的printf格式化字符串，例如"spam=%s eggs=%04d" % ("blah", 2)，求值為'spam=blah eggs=0002'。自從Python 3.0，str類提供了可供替代的format()方法dead-url=no，例如"spam={0} eggs={1:04d}".format("blah", 2)。在Python 3.6中，提供了“格式化字符串文字”或稱為“f字符串”，它向字符串文字前綴上f或F，這是一種String interpolation，例如x="blah"; y=2; f'spam={x} eggs={y:04d}'。
在Python中，在表達式和語句之間的區別是嚴格強制性的，這對比於語言如Common Lisp、Scheme或Ruby。故而Python中個別構造存在功能重複，比如：列表推導式相當for循環；條件表達式相當if語句；內建函數eval()相當exec()，前者用於表達式，後者用於語句。
語句不能成為表達式的一部份，由於列表和其他推導式或lambda表達式，都是表達式，也就不能包含語句。這個限制的一個示例：賦值語句比如a = 1，不能用作條件語句的條件判斷表達式的一部份；這能夠避免C語言編程中的一個常見錯誤，即在條件判斷時把等於算符==誤寫為賦值算符=，這不是預期代碼卻在語法上有效而能通過編譯器檢查，在Python中這會導致一個語法錯誤。

**函數**
Python的函數支持遞歸和閉包，及其他頭等函數特徵，但不支持函數重載。Python的函數作為頭等對象，具有和普通對象平等的地位。Python官方實現不提供尾調用優化或頭等續體，吉多·範羅蘇姆曾聲稱永遠都不會加以支持dead-url=no ，但有第三方庫支持彈跳床。
Python可以在函數定義時，於形式參數序列中，指定形式參數缺省值，即以param=value樣式進行一次性初始化。形式參數在初始化之後，保持既有綁定；函數的後續調用，可繼續對它進行訪問或變更。為有缺省值的形式參數提供實際參數，在函數調用時是可選的。
Python的函數實際參數與形式參數之間的結合，是傳遞“對象引用”，函數在被調用的時候，給函數調用的實際參數，被介入到一個局部符號表中，實際參數使用傳值調用來傳遞，而這個值總是對象引用，而非這個對象的值。如果形式參數綁定到一個可變的對象，則通過形式參數對此對象內容的修改，在函數外也是可見的。如果形式參數綁定到一個不可變的對象，則通過形式參數是不能修改此對象內容，但可以把形式參數重新綁定到其它對象上，這並不影響函數外的對象的值。
Python支持位置實際參數和關鍵字實際參數。函數調用時，實際參數可以如同C語言那樣，按照位置與形式參數匹配；也可以採用命名參數或稱為關鍵字實際參數，即kwarg=value樣式的實際參數。使用不對應實際參數的特殊形式參數/和*，可以將參數序列分為三部份：唯位置參數、可位置可關鍵字參數和唯關鍵字參數。有缺省值的形式參數之後，不能跟隨無缺省值的可位置形式參數。在一個函數調用的實際參數序列中，關鍵字實際參數必須出現在位置實際參數之後。
在位置和關鍵字形式參數序列末尾，可以分別有*args或**kwargs這樣的形式參數，它們對應於在函數調用時提供的，超出形式參數序列規定而無所對應的多個實際參數；在形式參數名字前加一個*號，該形式參數args是tuple類型，對應可變數目的位置實際參數；在形式參數名字前加**號，該形式參數kwargs是dict類型，對應可變數目的關鍵字實際參數。如果位置實際參數已經在一個序列類型如列表或元組的對象中，在引用它的變量前加一個*號傳遞給函數，則其中所有元素解包為多個位置實際參數；如果關鍵字實際參數在字典中，則加**號來傳遞給函數。
修飾器（decorator）可用來修改一個函數、方法或類定義的任何可調用Python對象。將已定義的原來對象傳遞給修飾器，它返回一個修改後的對象，接著把它綁定到在定義中那個名字。Python修飾器部份受到Java註解的影響，而有類似的語法；修飾器語法是純粹的語法糖，使用@作為關鍵字形成修飾符。修飾器是一種形式的元編程，它們增強它們所修飾的函數或方法的行動。
多個修飾器可以鏈接起來，通過在毗連的行上放置多個修飾符，或者使用中間變量。
函數修飾器的正規用法包括：用來建立類方法或靜態方法、設置先決條件和後置條件、實現多方法、增加函數特性、跟蹤、同步；此外更遠大的用法包括：尾調用消除、記憶化。
為了增強代碼的可讀性，可以在函數後書寫“文檔字符串”（簡稱docstrings），用於解釋函數的作用、參數的類型與意義、返回值類型與取值範圍等。可以使用內置函數help()，打印出函數的使用幫助。自從Python 3.0，函數可以對參數與返回值增加類型標註。此特性可方便對源代碼進行更深入的分析。自從Python 3.5，開始支持類型提示。

**對象及其方法**
Python支持大多數面向對象編程技術。在Python中所有東西都是對象，包括類、函數、數和模塊。它允許多態性，不只是在Class hierarchy之內，而且通過採用鴨子類型的方式。任何對象可以用於任何類型，只要它有適當的方法和特性（attribute）就能工作。Python天然支持類的繼承包括多重繼承，為此採用C3線性化或方法決定次序（MRO）算法，還支持混入。Python支持元類，自從Python 3.6，提供了定製類創建的簡單機制dead-url=no。
Python使用名字修飾，有限的支持私有變量。對象的（可寫）特性可以被提取為一個字典。在Python中，不強制使用訪問子與變異子方法，來訪問數據成員的面向對象編程信條。就像Python提供函數式編程構造，但不嘗試要求referential transparency一樣，它提供對象系統，但不要求面向對象編程行為。
對象的方法，是附屬於這個對象的類的函數。對於正常的方法和函數，語法instance.method(arguments)，是Class.method(instance, arguments)的語法糖。Python的方法有顯式的self形式參數，用來訪問實例數據；這借鑑自Modula-3，對立於隱式的self或this關鍵字，它們用在其他一些面向對象編程語言，比如C++、Java、Objective-C或Ruby之中。在Python中，self可以被看作是一個習慣用法，它可以被換為任何其它合法的參數名。
Python提供了super()內建函數，在一個類的方法中調用此函數返回一個代理（proxy）對象，它將其方法調用委託給這個類的父類或兄弟類，當一個子類的方法覆蓋了超類方法的時候，可通過調用super().method，來調用與子類的self.method方法同名超類方法。
Python支持一些以__開始和結束的特殊方法名，它們用於實現運算符重載，以及實現多種特殊功能。在Python中，可以通過定義特殊方法來重載運算符，比如在一個類上定義__add__()，將允許在這個類的實例上使用+算符。
在Python中，定義了一個或多個特殊方法__get__()、__set__()、__delete__()的類，可以用作描述器（descriptor）。建立一個描述器的實例，作為另一個類的一個類成員，使得這個實例成為此另一個類的屬性（property）。使用與特性（attribute）訪問相同的語法，訪問一個實例對象中的這個成員屬性。
Python允許通過使用@classmethod和@staticmethod修飾符，來分別建立類方法和靜態方法。給類方法的第一個實際參數，是對類對象的引用，而非對實例的self引用。靜態方法沒有特定的第一個實際參數，實例或類對象，都不固定的傳遞給靜態方法。
Python的property內建函數，將一個類中特殊定義的訪問一個特性的那些方法，包裝成的這個類的一個屬性。

**類型**
title=The Python Language Reference － 3. Data model － The standard type hierarchy
Python使用鴨子類型，並擁有有類型的對象，和無類型的變量名字。在編譯期不檢查類型約束，而寧願在一個對象上的操作出現可能的失敗，表現出這個給定對象不具有適合的類型。儘管是動態類型系統，Python卻是強類型的，禁止沒有明確定義的操作（比如加一個數到一個字符串），而不是默默的去嘗試轉換使其有意義。Python支持廣泛的類型和類的內省。類型是type的實例，可以被讀取和比較。
Python有著範圍廣泛的基本數據類型。同時具備常規的整數和浮點算術，它透明的支持任意精度算術、複數和十進制浮點數。Python支持種類繁多的字符串操作。在Python中，字符串是不可變的，所以在其他編程語言中可能就地改變字符串的字符串操作，比如字符替換，在Python中返回新的字符串。
Python有一個非常有用特徵，就是蒐集（或稱容器）類型的概念。一般的說，蒐集是以一種易於引用或索引的方式，包含其他對象的對象。蒐集有二種基本形式：序列和映射。Python對建立容器類型的對象有著語法上的支持。Python還提供了廣泛的蒐集操縱能力，比如內建的包含元素檢查和通用迭代協議。
有次序的序列類型是列表（動態數組）、元組和字符串。所有序列類型都是位置索引的（從0到長度−1），並且除了字符串，都可以包含任意類型的對象，在同一個序列中包括多種類型的對象。字符串和元組是不可變的，使得它們成為字典的鍵的完美候選者。在另一方面，列表是可變的，元素可以被插入、刪除、修改、添加或就地排序。
在另一方面，映射是以“字典”形式實現的無次序的類型，它將一組不可變的鍵，映射到相應的元素上（非常像數學函數）。在字典中的鍵，必須是不可變的Python類型，比如整數或字符串，因為在底層它們是通過散列函數實現的。字典還是語言內部的中心，因為它們居於所有Python對象和類的核心：在變量名字（字符串）和這個名字所引用的值之間的映射，就存儲為字典，而這些字典可以通過對象的__dict__特性直接訪問。
蒐集類型，在版本2.4中被增加入語言核心。集合是無索引、無次序的蒐集，它包含唯一性的不可變對象作為元素，並且實現了集合論運算，比如並集、交集&、相對補集-、對稱差^，和子集測試、真子集測試、超集測試>=、真超集測試>。有二種類型的集合：可變的set和不可變的frozenset。
Python允許編程者使用類，定義自己的類型，類是在面向對象編程中最經常使用的。類的新實例，是通過調用這個類的構造器而創建的，而類都是元類type的實例，type是type元類自身的實例，這允許了元編程和反射。
在版本3.0之前，Python有兩種類：舊式的和新式的。二種樣式的語法是一樣的，不同在於是否直接或間接的繼承自類object，所有新式類都從object繼承，並且是type的實例。在Python 2系列2.2以上，二種類都可以使用。在Python 3.0中淘汰了舊式類。
長期規劃是支持gradual typing，並且自從Python 3.5，語言的語法允許指定靜態類型，但在缺省實現CPython中不檢查它們。有叫做“mypy”的可選的靜態類型檢查器，支持編譯期類型檢查。
除了各種數據類型，Python解釋器還內建了很多其他類型，包括可調用類型：用戶定義函數、實例方法、生成器函數、協程函數、異步生成器函數、內建函數、內建方法、類、類方法；模塊，定製類，類實例，I/O對象（也叫做文件對象），和暴露給用戶的一些內部類型：代碼對象、框架對象、溯回對象、切片對象、靜態方法對象、類方法對象。

**算術運算**
Python的算術運算，使用平常的符號+、-、*、/和模除%。它還有下取整除法算符//、指數算符**和矩陣乘法算符@。二元運算先將兩運算元轉為共同類型，加法、減法、乘法、下取整除法和指數運算的結果也採用此類型，比如5**3 == 125而9**0.5 == 3.0。這些算符就像在傳統數學中一樣運算，具有同樣的優先級規則，中綴算符+、-，還可以分別表示取原數和取相反數的一元算符。
被稱為“真除法”的/的表現，隨著版本不同而有著顯著變化。自Python 3.0以來，/總是產生浮點數結果，包括兩個整數相除，比如5/2 == 2.5；而在下取整除法//中，兩個整數相除產生整數，比如7//3 == 2而7.5//3 == 2.0。
下取整除法//的修約是朝向負無窮的。向下取整能增加一致性，例如這意味著等式1=(a + n)//n == a//n + 1總是為真。模除%所得出的餘數的符號同於除數，比如-4%3 == 2而4%-3 == -2。其它多數編程語言比如C99採用截尾取整規則，餘數的符號同於被除數。模除運算結果餘數的定義，確使等式1=a == (a//n)*n + a%n對於a和n分別為正數或負數的情況都是有效的。餘數可以為負數，顯著不同於在數學中的歐幾里得除法規則下，餘數總是非負數的情況。
Python提供了round()內建函數，用於把一個浮點數修約成最近的整數，自Python 3.0以來，為了打破平局它採用了IEEE 754的約半成偶規則：round(1.5)和round(2.5)都產生2。
Python允許由比較運算鏈接起來的布爾表達式，表現得如在數學中常用的一樣。比如表達式a ，測試a 。C語言將它解析為(a ：即首先求值a ，其結果為0或1，接著把這個結果比較於c。
Python對所有整數運算，使用任意精度算術。在decimal模塊中的Decimal類，提供Decimal floating point，具有用戶可按需要而更改的缺省28個十進制有效數位精度，並有多種修約方式。在fractions模塊中的Fraction類，提供任意精度的有理數。第三方庫gmpy2，提供了到任意精度計算庫GMP/MPIR、MPFR和MPC的接口。
除了求絕對值函數abs()列入內建函數之外，大多數數學函數，處於math和cmath模塊內。前者用於實數運算，而後者用於複數運算。由於Python有著廣泛的數學庫，特別是第三方庫NumPy進一步擴展了固有能力，Python經常被用作科學腳本語言，來處理如數值數據處理和操縱等問題。

**標準庫**
Python擁有一個強大的標準庫。Python標準庫包括瞭如下功能：
*內建函數
*內建常量
*內建類型
*內建例外
*Python運行時服務
*定製Python解釋器
*導入模塊
*Python語言服務
*Text processing服務
*Binary data服務
*數據類型
*數值和數學模塊
*函數式編程模塊
*文件和目錄訪問
*數據持久化
*數據壓縮和存檔
*文件格式
*加密服務
*通用操作系統服務
*MS Windows專有服務
*Unix專有服務
*併發執行
*網絡和進程間通信
*互聯網數據處理
*結構式標記處理工具
*互聯網協議及其支持
*多媒體服務
*國際化
*程序框架
*Tk圖形用戶界面
*開發工具
*調試和分析
*軟件打包和發佈

**程序代碼實例**
一個在標準輸出設備上輸出Hello World的簡單程式，這種程式通常作為開始學習程式語言時的第一個程式，可將如下代碼錄入純文本文件並隨意命名比如program01.py，然後執行這個程序python3 program01.py：
print("Hello, world!")
Python也可以單步直譯執行。執行Python直譯器進入互動式命令列的環境，你可以在提示符號>>>旁輸入print("Hello, world!")，按Enter鍵輸出結果：
>>> print('Hello, world!')
Hello, world!
計算正數的階乘的程序代碼：
n = int(input('輸入一個數，就會印出其階乘: '))
if n 
注意，在Python 3.0及以上版本中，print是個函數，需要在要打印的字符串前後加上圓括號；在Python 2.6以下版本中，print是一個關鍵字和命令而不加圓括號。

**實現**
Python是一門跨平臺的腳本語言，Python規定了一個Python語法規則，根據該規則可編寫Python直譯器。Python屬於動態語言，其官方實現將Python程序編譯成中間形式的字節碼dead-url=no，並接著在它的虛擬機上執行，相較於C/C++和java的等編譯語言而言運行速度較慢。
活躍開發的實現- CPython：官方的直譯器，需要區別於其他直譯器的時候才以CPython稱呼。CPython默認採用全局解釋器鎖（GIL），以確保在任何時刻只有一個線程執行Python字節碼；一些擴展模塊被設計為在進行計算密集任務時釋放GIL，還有在進行I/O時總是釋放GIL。- PyPy：用RPython編寫的Python實現，兼容至CPython版本3.10和2.7，它採用了跟蹤JIT，缺省支持stackless模態。
*MicroPython：為微控制器而優化的Python 3變體，它實現了完整的Python 3.4語法，和補充自版本3.5的async/await關鍵字，和後來版本的一些選定特徵；它提供了實現Python標準庫模塊功能子集的內建模塊，和特定於微控制器的一些模塊。CircuitPython是Adafruit開發的MicroPython分叉。- Codon：使用了LLVM的高性能Python編譯器，它將Python代碼編譯成本機機器代碼，不帶有任何運行時開銷並且支持本機多線程，它的語義在數據類型等方面上與CPython有所不同，它由MIT CSAIL的研究人員開發。- Pyodide：基於WebAssembly/Emscripten的用於瀏覽器和Node.js的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子集編譯成C++11的提前編譯器，它依賴於Boost和xsimd庫，將標註了接口描述的Python模塊編譯為本機共享庫模塊，能利於上多核和SIMD指令單元。- Nuitka：用Python編寫的到C11（或替補為C++03）的優化編譯器，它依賴於CPython的libpython庫，能完成嵌入所有模塊的程序編譯、擴展模塊及包編譯和獨立模態程序發佈。- Transcrypt：用Python編寫的Python 3.9到JavaScript編譯器，用於在瀏覽器中運行Python代碼，它被預先編譯為高可讀性且高效的JavaScript代碼。- MyHDL：將Python編譯成Verilog或VHDL。
其他實現舉例：Jython，它是用Java實現的Python 2.7。IronPython，它是建造在DLR之上的Python 2.7和Python 3.4實現。Stackless Python，它是實現microthread的CPython 3.8分叉。Pyston，它是具有JIT等性能優化的CPython 3.8.12的分叉。Pyjion，將Python代碼編譯成本機CIL的CPython 3.10的JIT擴展。Cinder，它是Meta孵化器發佈的具有包括JIT等很多優化的CPython 3.10分叉。

**開發環境**

**通用文本編輯器**
很多並非集成開發環境軟件的文本編輯器，也對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，支持自動補全、智能感知、自動語法檢查、工程管理、svn/mercurial集成、自動單元測試等功能，具有可擴展的插件系統，通過可選插件支持Git集成。調試功能與Visual Studio和Eclipse類似。- Spyder：開源的跨平臺科學計算IDE。 - ：功能較全的開源IDE，使用Delphi開發。- PyCharm：由JetBrains公司出品，具備一般IDE的功能，比如調試、語法高亮、Project管理、代碼跳轉、智能提示、自動完成、單元測試、版本控制等等，另外，它還提供了一些功能用於Django開發，同時支持Google App Engine，還支持IronPython。它是商業軟件，但也具有社區版和教育版。- Thonny：適用於編程初學者的IDE。- Wing IDE：商業軟件，有免費的功能有限的Wing 101。

**第三方擴展包**
Python Powered
Python社群提供了大量的功能覆蓋眾多領域的第三方模組，其使用方式與標準庫類似。第三方模塊可以使用Python/Cython或者C語言編寫。軟件工具SWIG和SIP，通過定義接口文件或規定文件的方式，可以將C/C++編寫的程序庫包裝為Python模塊。Python解釋器本身也可以被集成到其它需要腳本語言的程式內。
Python包索引是公開的軟件包在線倉庫。pip是官網推薦的以安全方式安裝Python應用及其依賴軟件包的最流行工具。要安裝在整個操作系統範圍內共享的Python包，現在需要通過操作系統的軟件包管理系統。要將特定於應用的依賴包隔離於共享的Python安裝，可以使用標準庫的venv或第三方工具virtualenv創建虛擬環境；第三方工具pipenv，能自動為用戶項目建立和管理虛擬環境，並在安裝/卸裝軟件包的時候，向此項目的Pipfile文件增加/移除這個軟件包。

**網絡服務**
Python定義了WSGI標準應用接口，來協調HTTP伺服器與基於Python的Web程式之間的溝通。比如，通過mod_wsgi模組，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：用來解析HTML/XML的一個簡單易用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、GIO和GStreamer等庫使用的對象系統。- Kivy：用於開發多點觸控應用軟件的開源Python庫，採用了自然用戶界面（NUI）。- WxPython：GUI編程框架wxWidgets的Python包裝庫，它與MFC的架構相似。- PySimpleGUI：將Tkinter、Qt、WxPython和Remi的GUI框架變換成簡單的接口。- Gooey：將幾乎所有Python 3控制檯程序用一行代碼轉變成GUI應用。
*Dear PyGui：快速而強力的具有極小依賴性的GUI工具箱。
*pywebview：輕量級跨平臺的對WebView構件的包裝器，允許在其本地GUI窗口中顯示HTML內容。 

**數據科學**
重要的數據科學用第三方軟件庫有：
*NumPy：Python的基礎性的科學計算軟件庫，它提供了強力的多維陣列對象，廣播式陣列運算，集成C/C++和Fortran代碼的工具，較為有用的線性代數、傅里葉變換和隨機數功能。
*SciPy：用於數學、科學和工程的Python軟件庫，它以NumPy的多維陣列作為基本數據結構，所包含的模塊針對了：統計、最優化、數值積分、常微分方程求解、插值、線性代數、傅里葉變換、信號處理、圖像處理等。
*CuPy：NumPy/SciPy兼容的GPU加速的陣列庫，它可在NVIDIA CUDA或AMD ROCm平臺上充當其直截了當的替代者，來運行現存的NumPy/SciPy代碼。
*matplotlib：基於NumPy的綜合性Plot (graphics)庫，用於創建靜態的、動畫的和交互式的數據可視化。
*pandas：用於數據分析和數據操縱的軟件庫，它建造在NumPy基礎上，提供了加標籤數據結構“數據幀”，和統計函數等。它的缺省繪圖後端是matplotlib，還可以擴展上第三方Plot (graphics)後端。
*Dask：伸縮範圍從筆記本電腦至計算機集群的並行計算庫，它提供的用戶接口鏡像了PyData生態系統中pandas、scikit-learn和NumPy的API。

**數據可視化**
主要的數據可視化軟件庫及儀表板框架有：
*VisPy：高性能交互式2D/3D數據可視化庫，它通過多種後端OpenGL庫之一來顯示非常大的數據集，並提供叫做gloo的受用NumPy的Python風格OpenGL ES 2.0接口。
*glumpy：用於科學數據可視化的快速、可伸縮的Python庫，它基於了NumPy和OpenGL綁定庫PyOpenGL。
*seaborn：基於matplotlib的數據可視化庫，它提供了繪製統計圖形的高層接口。
*Vega-Altair：建造在Vega-Lite JSON規定之上的聲明式統計可視化庫。- Bokeh：針對現代Web瀏覽器的交互式數據可視化庫，它在大型或流式的數據集上提供高效的交互性。
*plotly：交互式開源的基於瀏覽器的圖形繪製庫，它是建造在plotly.js之上的聲明式圖表庫。
*Dash：數據應用和儀表板框架，它可將現代用戶界面元素如下拉選單、Slider (computing)和圖形，直接連結至分析型Python代碼，它由Plotly公司出品，基於了React、Flask和plotly.js。
*Panel：Data exploration和Web應用框架，它能無縫的集成於PyData生態系統，提供交互式數據表格和可視化等功能，它是HoloViz生態系統的成員，這個工具組還包括了：hvPlot、HoloViews、GeoViews、Datashader、Lumen、Param和Colorcet。
*Streamlit：迅速將Python腳本轉變為可共享Web應用的框架。
*Voilà：將Jupyter Notebook轉變為獨立的Web應用的框架。

**機器學習**
基礎性的機器學習軟件庫及框架有：
*scikit-learn：機器學習軟件庫，它提供的功能包括：監督學習中的分類和迴歸，無監督學習中的聚類和降維，還有模型選擇和Data Preprocessing。它基於了NumPy、SciPy、輕量級管道庫Joblib和線程池控制庫threadpoolctl，其繪圖功能依賴於matplotlib，還用到了scikit-image、seaborn和plotly。
*PyMC：基於從Theano分叉出的PyTensor的概率編程庫，它用於建立貝葉斯統計模型，並使用馬爾可夫鏈蒙特卡洛（MCMC）方法進行模型擬合。
*TensorFlow：Google開發的“端到端”開源機器學習平臺，它提供了Python API，其中實現了Keras API。Keras現在是在TensorFlow 2上建立的深度學習高層API。
*PyTorch：Meta在Torch基礎上開發的開源的Python軟件包，提供了具有強大的GPU加速的張量計算，和建立在基於tape的自動微分系統上的深度神經網絡。
*JAX：Google開發的開源機器學習框架，其核心是可任意組合的對數值純函數的變換，它結合了修改版本的針對NumPy的自動微分庫Autograd，和TensorFlow中的加速線性代數庫XLA，它使用XLA來在GPU和TPU上編譯和運行NumPy程序。

**其它種類**
pegen：Python的PEG解析器生成器dead-url=nodead-url=no。 
*PeachPy：採用高層Python的可移植高效x86-64彙編代碼生成器。
*llvmlite：輕量級的LLVM的Python綁定，用於編寫即時編譯器。 
*SymPy：支持數學符號運算的軟件庫，用於提供計算機代數系統。
*SimPy：基於由Python生成器函數定義的進程的離散事件模擬框架。
*ModernGL：不同於PyOpenGL，ModernGL是在OpenGL 3.3+核心上的Python包裝器，它簡化了簡單圖形應用如科學模擬、遊戲和用戶界面的創建。
*PyCUDA：不同於Nvidia的cuda-python，PyCUDA提供對CUDA API的Python風格訪問。
*PyOpenCL：PyOpenCL提供對OpenCL API的Python風格訪問，例如光滑粒子流體動力學框架PySPH的性能關鍵部份用Cython和PyOpenCL實現。
*Kompute：基於Vulkan的通用計算框架，它是高速的、支持移動設備、異步的並且針對高級GPU數據處理用例做了優化。
*Taichi Lang：採用同Python幾乎一樣語法的指令式並行編程語言，它嵌入在Python之中並使用即時編譯器框架如LLVM，將計算密集的Python代碼轉變成本機GPU或CPU指令。
*SQLAlchemy：Python的SQL工具包和採用數據映射器模式的對象關係映射器（ORM）。
*Graphene：GraphQL框架，支持各種數據源如SQLAlchemy、Mongo、Django和定製Python對象等。GQL是常用來與之配合的GraphQL客戶端Python庫。
*Pillow：是基於Python的圖像處理軟件庫，它支持廣泛的圖形文件格式，分叉於已終止的PIL。
*pypdf：能夠分割、合併、修剪和轉變PDF文件的Python軟件庫。
*PyFilesystem2：Python的文件系統抽象層，將在歸檔、內存和雲端存儲等之中的文件和目錄，像在本地驅動器中一樣容易的處置。
*Fabric：經由SSH遠程執行shell命令的高層庫，它產生有用的Python對象作為回饋。
*Prefect：現代工作流程編排框架，它易於建造、調度和監控健壯的數據流水線。
*pygame：開發視頻遊戲的Python軟件庫，基於了SDL軟件庫。視覺小說引擎Ren'Py建造在pygame之上。
*pyglet：Python編寫的面向對象的遊戲和多媒體庫，利用了FFmpeg軟件庫並需要OpenGL 3.3+。2D街機遊戲開發庫Arcade基於了pyglet，它還利用了建造在2D物理引擎Chipmunk之上的Pymunk。- Panda3D：開源遊戲引擎，包括了圖形、音頻、I/O、碰撞偵測和其他與3D遊戲有關的功能，使用Python作為遊戲開發語言。
*pythonnet：可以近乎無縫的集成.NET通用語言運行庫（CLR）的程序包。
*PyInstaller：將Python應用和它的依賴項捆綁成一個單一的包，從而不需要安裝Python解釋器或任何模塊就可以運行應用。

**應用**
在很多作業系統裡，Python是標準的系統元件，它被列入Linux標準規範之中。大多數Linux發行版和macOS都集成了Python，可以在終端模擬器或Virtual console下直接執行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語法、tab補全和歷史。- Conda：跨平臺的、語言無關的二進制包管理器，它被Anaconda發行採用。- SCons：軟件建造工具，它可代替make構建編譯程序。- ：使用Python語言編寫的WSGI Web服務器。- Plone：基於Zope的內容管理系統。- Mezzanine：基於Django框架的內容管理系統。- Orange：基於scikit-learn和pandas的開源機器學習和數據可視化軟件，由盧布爾雅那大學開發，利用了PyQt5和基於Blink的PyQtWebEngine，通過廣大多樣的工具箱來建造數據分析工作流程。- SageMath：涵蓋許多數學功能的應用軟件，它建造在NumPy、SciPy、matplotlib、SymPy、Maxima、GAP、FLINT、R等開源軟件包之上。- Veusz：用Python、PyQt和NumPy寫成的科學繪圖軟件，可生成出版水準的PDF或SVG輸出。 - MayaVi：基於VTK的應用程序和庫，用於交互式科學數據可視化和採用Python的3D繪圖。- Blender：開源3D繪圖軟體，使用Python作為建模工具與GUI語言。- Inkscape：開源的SVG矢量圖形編輯器，使用Python用於插件。- Pitivi：用Python開發的基於GStreamer的視頻編輯軟件。

**人工智能**
經由Python開發了眾多的人工智能模型和作為其支撐的軟件庫：
*Ray：對人工智能及Python應用的運行規模進行伸縮的統一框架，由Anyscale公司開發。它構成自一個核心的分佈式運行時系統，和加速機器學習工作負載的AI軟件庫。
*Kornia：基於PyTorch的可微分計算機視覺軟件庫。
*spaCy：用Python和Cython開發的工業級實力的自然語言處理軟件庫。
*Argos Translate：基於OpenNMT的離線神經機器翻譯軟件庫。
*Stable Diffusion：用Python開發的深度學習文本到圖像生成模型，基於了CUDA、PyTorch、VAE、U-Net和OpenAI的CLIP，其代碼和模型權重已公開發布，可以在大多數配備有適度GPU的消費類計算機硬件上運行。 
*Transformers：為下載和訓練前沿的預訓練模型提供API和工具，由Hugging Face開發，支持在PyTorch、TensorFlow和JAX之間的框架互操作性。- Gradio：它是一個Python庫，允許快速創建和分享用於機器學習模型、API或任何任意Python函數的Web應用程序。使用Gradio，可以構建交互式用戶界面，與各種機器學習框架兼容。還可以使用Gradio以交互方式調試模型、從用戶獲取反饋，並通過自動生成的可共享鏈接輕鬆部署模型。- LangChain：它是一個應用框架，旨在簡化使用大型語言模型的應用程序。作為一個語言模型集成框架，LangChain的用例包括文檔分析和總結摘要, 代碼分析和聊天機器人。 LangChain提供了一個標準接口，用於將不同的語言模型（LLM）連接在一起，以及與其他工具和數據源的集成。

**社群流行**
自從2003年，Python始終排行於TIOBE Programming Community Index前十最流行編程語言，在2021年10月它首次達到了第一名最流行語言（居於C和Java之前），並被選為2007年、2010年、2018年、2020年、2021年和2024年的年度編程語言。它有如下著名的社群：- PyCon：各地社群舉辦的會議，通常每年舉辦。各社群在會議中討論Python相關的議題。- Python Discord：參與者眾多的Python社區。- PyLadies：由女性社群發起的社群，主要注重於發展Python的女性程式設計社群。- Django Girls：使用Django網頁設計框架，推廣使用Python進行網頁設計的技術。

**影響的語言**
Python的設計和哲學已經影響了很多其他編程語言：- Boo：使用了縮進、類似的語法和類似的對象模型。- Cobra：使用了縮進和類似的語法。- Coconut：在Python語法之上增加了用於函數式編程的新特徵的Python變體。- CoffeeScript：有受Python啟發的語法。- ECMAScript/JavaScript：從Python借鑑了迭代器和生成器。- GDScript：內置於Godot遊戲引擎的非常類似Python的腳本語言。- Genie：基於Vala編譯器的具有近似Python語法的語言。- Go：其設計原則受到了Python的可讀性與易用性的啟發，享有相同風格的數組分片語法。- Groovy：受到Python等動態類型語言的影響。- Julia：在表達高級數值計算的方式和支持通用編程上借鑑了Python等語言。- Kotlin：融合了Python和Java特徵，極小化了樣板代碼而增加了開發效率。- Mojo：基於MLIR (software)並設計為Python語言的超集。- Nim：使用縮進和類似的語法。- Ruby：主要從Python等語言中借鑑了特徵。- Starlark：用在Bazel軟件中有受Python啟發語法的語言。- Swift：有受Python啟發的語法。

**代碼示例**

**註釋**

**延伸閱讀**
dead-url=no- dead-url=no- dead-url=no- dead-url=no

**參閲**
 編程語言列表- Python語法及語義- Python的歷史- List of Python software

**外部連接**
  Awesome Python date=20210205024420 -  Real Python Tutorials date=20210207194322 -  programingz － Learn Python Programming date=20210208142230 -  w3schools － Python Tutorial date=20210204202552 -  ItsMyCode－ Learn Python Programming date=20211026192003-  Codecary － Learn Python Programming date=20211026192003-  dainikchorcha － Learn Python Programmingdate=20220306124159 -  Tutlane - Learn Python Online date=20210616043552 -  Brmgha - Learn & Challenges Python Online date=20210616043552 -  AlmaBetter- Python Tutorial date=20231026130136