Python是由吉多·范羅蘇姆(荷蘭語:Guido van Rossum)于1989年末開發的一種編程語言,于1991年2月首次發布。 Python是一種免費的、可移植的、可解釋的、面向對象的編程語言,它同時具有解釋語言和腳本語言功能。 Python簡潔的語法和動態類型,加上其解釋性,使其被應用于許多領域的腳本編寫和快速應用程序開發。
1989年末,吉多·范羅蘇姆在荷蘭國家數學與計算機科學研究中心(荷蘭語:Centrum Wiskunde & Informatica,CWI)開始研究Python。1995 年,吉多·范羅蘇姆在國家創新研究公司(英語:Corporation for National Research Initiatives,CNR)繼續研發 Python ,并發布了該軟件的多個版本。2000年6月,包括吉多·范羅蘇姆在內的Python開發團隊組建了PythonLabs團隊,同年10月,PythonLabs團隊加入Digital Creations。 2000年10月16日,Python 2.0發布。 2001 年,Python軟件基金會成立。2008年12月3日,Python 3.0發布。 2023年6月6日,Python 3.11.4發布。
Python具有代碼簡潔、易讀、易維護等特點,擁有高效的高級數據結構、豐富的基礎類庫和成熟的第三方類庫。Python易于擴展,可以使用C或C++(或者其他可以通過C調用的語言)擴展新函數和數據類型。Python還是一種支持字節編譯的解釋語言,并且Python的字節碼是獨立于機器的,可以在不同的硬件和軟件平臺上執行,而無需再次編譯。 Python的特性使其擁有大批使用者,成為最流行的開源編程語言之一。截至2023年8月,Python位列TIOBE編程社區指數中最受歡迎的編程語言之首。
發展歷程
Python的創始人吉多·范羅蘇姆在荷蘭國家數學與計算機科學研究中心工作時,經常使用ABC語言,他認為該語言有較多優點但存在缺乏擴展性的問題。吉多·范羅蘇姆參與的有關Amoeba分布式操作系統的項目需要一種比編寫C程序或Bourneshell腳本更好的方法來進行系統管理。在此項工作過程中,他意識到異常處理功能作為編程語言功能的重要性,并想到一種語法像ABC并可以訪問調用Amoeba系統的腳本語言就能滿足項目需求。因此,1989年末,吉多·范羅蘇姆在阿姆斯特丹的研究中心開始研究Python。Python得名于20世紀70年代的英國電視喜劇連續劇《巨蟒劇團之飛翔的馬戲團》(英語:Monty Python's Flying Circus),據說,Python的創始人在開發語言的同時,正在觀看節目重播。1991年2月,Python 0.9在USENET首次發布。 Python最初是為執行一般管理任務而設計的,但因其被設計的較為通用,逐漸被應用于多個領域,擁有大批使用者,并于1994年創建了一個專門的互聯網新聞組comp.lang.python。
1995 年,吉多·范羅蘇姆在弗吉尼亞的國家創新研究公司繼續研發Python ,并發布了該軟件的多個版本。1999年4月,Python 1.5.2發布。2000年6月,包括吉多·范羅蘇姆在內的Python開發團隊轉移到BeOpen.com,并組建了PythonLabs團隊,同年10月,PythonLabs團隊離開Beopen,并加入Digital Creations。 2000年10月16日,Python 2.0發布,與早期版本的Python相比具有包容性的語言開發過程,還包含了更多的編程功能,如修復垃圾回收機制問題、增加Unicode編碼標準支持以及列表理解。2001 年,Python軟件基金會成立,這是一個專為擁有Python相關知識產權而創建的非營利組織。2008年12月3日,Python 3.0發布,不完全兼容Python 2,其開發的重點是清理代碼庫并消除冗余,Python 3.0的主要修改包括將打印語句轉換為內置函數,改進整數的劃分方式以及提供更多的Unicode支持。2010年7月3日,Python 2.7發布,并計劃作為2.x版本中的最后一個版本,旨在通過提供兼容性,讓Python2.x用戶更容易將功能移植到Python3。
2023年8月24日,Python 3.11.5發布。 截至2023年8月,Python位列TIOBE編程社區指數中最受歡迎的編程語言之首。
概述
Python源于腳本語言ABC,支持面向對象編程之外的多種編程范式是一種免費的、可移植的、可解釋的、面向對象的編程語言,其設計的理念是:對于特定的問題,只要有一種最好的方法來解決就夠了,因此與其他語言相比Python語法較為簡潔。用戶可以從Python官網免費獲取Python解釋器和標準庫的源代碼或二進制形式。
Python是用可移植的ANSI C編寫的,這意味著可以在Windows、Linux和麥金塔等不同環境中編寫、測試和上傳Python代碼,即Python具備可移植特性。
Python是一種支持字節編譯的解釋語言。Python程序由在交互模式下運行的Python解釋器交互運行、調試和測試。Python的源代碼是在解釋器上加載時直接進行字節編譯的,也可以顯式進行字節編譯。并且Python的字節碼是獨立于機器的,可以在不同的硬件和軟件平臺上執行,而無需再次編譯。
Python是一種面向對象的語言,并提供了其他結構化和過程化語言的特性。Python允許面向對象的多重繼承,還支持多態性,即Python可調用對象可以接受可選參數、關鍵字參數或無限數量的參數。
Python代碼簡潔易讀,是因為其具有簡單的語法與語義和相對較少的關鍵字,使用縮進而不是額外的符號將語句分組以形成代碼塊。
除上述特點外,Python還是可擴展的,它有許多系統調用和庫的接口,也有各種窗口系統的接口,并且可以用C或C++進行擴展。它也可用作需要可編程接口的應用程序的擴展語言。 他還包含一個內置的模塊導入系統,允許導入其他腳本和模塊以供使用。
語法語義
行結構
邏輯行與物理行
Python程序可以拆分為多個邏輯行。一個邏輯行是由一個或多個物理行組成的,它的結束是以NEWLINE形符表示的。
物理行是一序列字符,由行尾序列終止。兩個及兩個以上的物理行可用反斜杠拼接為一個邏輯行。
圓括號、方括號、花括號內的表達式與三引號字符串可以分成多個物理行,隱式拼接行之間沒有NEWLINE形符,后續行的縮進不影響代碼運行,且可以存在空的后續行。
注釋與聲明
注釋是用來說明程序代碼或是提供其他信息的描述文字。Python的單行注釋以井號 (#) 開頭,并在物理行的末尾結束;多行注釋是以三個引號來引住注釋文字。注釋在語法分析中會被忽略。
Python腳本第一或第二行的注釋匹配正則表達式 coding[=:]\s*([-\w.]+) 時,該注釋會被當作編碼聲明;這個表達式的第一組指定了源碼文件的編碼。編碼聲明必須獨占一行,在第二行時,則第一行必須也是注釋。沒有編碼聲明時,默認編碼為UTF-8。如果聲明了編碼格式,該編碼格式的名稱必須是Python可識別的。 編碼格式會被用于所有的詞法分析,包括字符串字面值、注釋和標識符等。
縮進
縮進是邏輯行開頭的空白符(空格符和制表符),用于計算該行的層級,決定語句組塊。首個非空字符前的空格數決定了該行的縮進層次。縮進不能用反斜杠進行多行拼接。
Python程序代碼中的縮進對執行結果有很大的影響,即Python對縮進是非常嚴謹的。同一個組塊的程序代碼必須使用相同的空格或制表符進行縮進,否則就會出現錯誤。
形符
Python形符有NEWLINE、INDENT、DEDENT、標識符、關鍵字、字面值、運算符 、分隔符等。 空白符(行終止符除外)不是形符。NEWLINE形符表示結束邏輯行;連續行的縮進層級以堆棧形式生成INDENT和DEDENT形符。
標識符與關鍵字
Python標識符的句法基于Unicode標準附件UAX-31,并進行了一定的細化與修改。在Python 2.x中,ASCII范圍內(U+0001..U+007F)的有效標識符字符為:大小寫字母A至Z、下劃線 _ 、數字0至 9,但不能以數字開頭;而Python 3.0引入了ASCII之外的更多字符,這些字符的分類使用unicodedata模塊中的Unicode字符數據庫版本。標識符的長度沒有限制,但區分大小寫。
關鍵字是Python中的特殊單詞,不能用來進行命名操作。關鍵字表示將導人Python解釋器中的命令。Pyhton 3.10新增軟關鍵字,即僅在特定上下文下保留的某些標識符。
字面值
字面值是內置類型常量值的表示法。Python中的字面值有字符串字面值、字節串字面值、格式字符串字面值與數值字面值。
格式字符串字面值或稱f-string是標注了 'f' 或 'F' 前綴的字符串字面值。這種字符串可包含替換字段,即以{}標注的表達式。其他字符串字面值只是常量,格式字符串字面值則是可在運行時求值的表達式。
數值字面值有三種類型:整數、浮點數、虛數。數值字面值不含正負號,如-1等負數是由一元運算符 '-' 和字面值1合成的。
運算符
運算符是一些特殊標記(字符序列),在Python解釋器中具有一定意義。使用它們意味著進行特定的操作,如加法、減法。
分隔符
標點符號(又名分隔符)用來分開不同的元素。有些分隔符來自于數學符號,另一些則來自于英語。
數據
對象是Python中對數據的抽象。Python程序中的所有數據都由對象或對象間關系來表示。每個對象都有各自的標識號、類型和值。對象的標識號是不變的,可將其理解為該對象在內存中的地址,'is' 運算符可以比較兩個對象的標識號是否相同,id() 函數能返回一個代表標識號的整數;對象的類型決定該對象所支持的操作與可能的取值,對象的類型是不可變的,type() 函數能返回一個對象的類型 (類型本身也是對象);值可以改變的對象被稱為可變對象,如字典和列表,值不可以改變的對象被稱為不可變對象,如數字、字符串和元組。
Python的數據類型可分為數字型、序列、集合、映射。Python區分整型數、浮點型數和復數,其中整型數可細分為兩種類型:整型,此類對象表示任意大小的數字,僅受限于可用的內存 (包括虛擬內存);布爾型,此類對象表示邏輯值False和True;浮點型,此類對象表示機器級的雙精度浮點數;復數此類對象以一對機器級的雙精度浮點數來表示復數值。序列表示以自然數作為索引的有限有序集,可分為不可變序列與可變序列,不可變序列類型的對象一旦創建就不能再改變;可變序列在被創建后仍可被改變,包括列表與字節數組。集合類型表示由不重復且不可變對象組成的無序且有限的集合,可通過內置的 set() 構造器創建。映射表示由任意索引集合所索引的對象的集合。
表達式
表達式是表達式元素的累積,如名稱、屬性訪問、運算符或函數調用。
運算表達式
Python中的運算表達式有冪次運算、一元算術和位運算、二元算術和位運算、移位運算、比較運算、布爾運算。
賦值表達式
賦值表達式為Python 3.8新增功能,有時又被稱為“命名表達式”或“海象表達式”,語法形式如下:
是將一個expression賦值給一個identifier,同時還會返回expression的值。
賦值表達式在被用作切片、條件表達式、lambda表達式、關鍵字參數和推導式中的if表達式以及在assert和with語句中的子表達式時必須用圓括號括起來。
條件表達式
條件表達式,有時稱為“三元運算符”,在所有 Python 運算中具有最低的優先級。語法格式如下:
首先是對條件expression2求值。 如果expression2為真,expression1將被求值并返回其值;否則將對expression3求值并返回其值。
lambda表達式
lambda表達式,有時稱為 lambda 構型,被用于創建匿名函數。 表達式lambda parameters: expression會產生一個函數對象 。該未命名對象的行為類似于用以下方式定義的函數:
通過lambda表達式創建的函數不能包含語句或標注。
表達式列表
表達式列表是一組表達式的組合。除了作為列表或集合顯示的一部分,包含至少一個逗號的表達式列表將生成一個元組。 元組的長度就是列表中表達式的數量。 表達式將從左至右被求值。
表達式運算順序
Python按從左至右的順序對表達式求值。 但在對賦值操作求值時,右側會先于左側被求值。下表對Python中運算符的優先順序進行了總結,從最高優先級(最先綁定)到最低優先級(最后綁定),相同單元格內的運算符具有相同優先級。
語句
簡單語句
簡單語句由一個單獨的邏輯行構成。 多條簡單語句可以存在于同一行內并以分號分隔。
表達式語句用于計算和寫入值,或者調用一個過程。表達式語句會對指定的表達式列表或單一表達式進行求值。
賦值語句用于將名稱(重)綁定到特定值,以及修改屬性或可變對象的成員項。賦值是根據目標(列表)的格式遞歸地定義的。 當目標為一個可變對象(屬性引用、抽取或切片)的組成部分時,該可變對象必須最終執行賦值并決定其有效性,如果賦值操作不可接受也可能引發異常。
增強賦值語句是在單個語句中將二元運算和賦值語句合為一體,對目標和表達式列表求值,對兩個操作數相應類型的賦值執行指定的二元運算,并將結果賦值給原始目標。不同于普通賦值,增強賦值會在對右手邊求值之前對左手邊求值。
assert語句是在程序中插入調試性斷言的簡便方式。
pass語句是一個空操作,即當它被執行時,什么都不發生。 當語法上需要一條語句但并不需要執行任何代碼時,可用它來臨時占位。
return語句會離開當前函數調用,在語法上只會出現于函數定義所嵌套的代碼,不會出現于類定義所嵌套的代碼。如果提供了表達式列表,它將被求值,否則以 None 替代。
yield語句在語義上等同于 yield表達式。 yield 語句可用來省略在使用等效的yield表達式語句時所必須的圓括號。yield表達式和語句僅在定義generator函數時使用,并且僅被用于生成器函數的函數體內部。在函數定義中使用yield可使得該定義創建的是生成器函數而非普通函數。
raise語句被用來引發一個異常。異常/錯誤對象必須有一個名字,且它們應是Error或Exception類的子類。
break語句在語法上只會出現于for或while循環所嵌套的代碼,但不會出現于該循環內部的函數或類定義所嵌套的代碼。它會終結最近的外層循環,如果循環有可選的else子句,也會跳過該子句。如果一個for循環被break所終結,該循環的控制目標會保持其當前值。當break將控制流傳出一個帶有finally子句的try語句時,該finally子句會先被執行然后再真正離開該循環。
continue語句在語法上只會出現于for或while循環所嵌套的代碼中,但不會出現于該循環內部的函數或類定義中。 它會繼續執行最近的外層循環的下一個輪次。當continue將控制流傳出一個帶有finally子句的try語句時,該finally子句會先被執行然后再真正開始循環的下一個輪次。
import語句被用于導入模塊。
global語句是作用于整個當前代碼塊的聲明。 它意味著所列出的標識符將被解讀為全局變量。 在global語句中列出的名稱不得在同一代碼塊內該global語句之前的位置中使用。在global語句中列出的名稱不能被定義為形式參數,也不能被作為with語句或except子句的目標,以及for循環的目標列表、class定義、函數定義、import語句或變量標注等等。
nonlocal語句會使得所列出的名稱指向之前在最近的包含作用域中綁定的除全局變量以外的變量。這個語句允許被封裝的代碼重新綁定局部作用域以外且非全局(模塊)作用域當中的變量。與 global語句中列出的名稱不同,nonlocal語句中列出的名稱必須指向之前存在于包含作用域之中的綁定。nonlocal語句中列出的名稱不得與之前存在于局部作用域中的綁定相沖突。
復合語句
復合語句是包含其它語句(語句組)的語句,會以某種方式影響或控制所包含其它語句的執行。 通常,復合語句會跨越多行,但在某些簡單形式下整個復合語句也可能包含于一行之內。一條復合語句由一個或多個子句組成, 一個子句則包含一個句頭和一個句體。 特定復合語句的子句頭都處于相同的縮進層級。 每個子句頭以一個作為唯一標識的關鍵字開始并以一個冒號結束。 子句體是由一個子句控制的一組語句,可以是在子句頭的冒號之后與其同處一行的一條或由分號分隔的多條簡單語句,也可以是在其之后縮進的一行或多行語句。 只有后一種形式的子句體才能包含嵌套的復合語句。
if語句用于有條件的執行。它通過對表達式逐個求值直至找到一個真值,在子句體中選擇唯一匹配的一個,然后執行該子句體,并且if語句的其他部分不會被執行或求值。
while語句用于在表達式保持為真的情況下重復地執行子句體,如果表達式值為假終止循環。
for語句用于對序列(例如字符串、元組或列表)或其他可迭代對象中的元素進行迭代。for循環會對目標列表中的變量進行賦值。 這將覆蓋之前對這些變量的所有賦值,包括在for循環體中的賦值。
try語句可為一組語句指定異常處理句柄和/或清理代碼。except子句指定一個或多個異常處理句柄。 當try子句中無異常發生時,將不會有任何異常處理句柄被執行。當try子句代碼塊中發生異常時,將啟動對異常處理句柄的搜索。except* 子句被用來處理 ExceptionGroup,有多個except*子句可被執行,各自處理異常組的一部分。finally子句總是會被執行。
with語句用于包裝帶有使用上下文管理器定義的方法的代碼塊的執行。 上下文管理器是一個對象,它定義了在執行with語句時要建立的運行時上下文,并處理進入和退出所需運行時上下文以執行代碼塊。 上下文管理器的典型用法包括保存和恢復各種全局狀態,鎖定和解鎖資源,關閉打開的文件等等。通常使用with語句,但是也可以通過直接調用它們的方法來使用。
match語句用于進行模式匹配,是Python 3.10新增功能。match語句接受一個變量或表達式,并將其值與作為一個或多個case塊給出的連續模式進行比較,當滿足某個case的條件時,就會執行該條件下的對應代碼。
def語句用于定義函數,其定義的函數可以像用lambda表達式定義的函數一樣被傳遞或賦值給其他名稱,并且允許執行多條語句和使用標注。
class語句用于定義類。
函數
函數允許用戶將一系列代碼語句綁定到一個可以重復使用的表單中,將數據發送到一個函數后,可返回它對該數據所做操作的結果。
函數定義與調用
函數定義由關鍵字def開始。用戶可通過函數定義來創建用戶定義函數對象。語句塊是構成函數對象進行計算的部分。函數定義是一條可執行語句,它執行時會在當前局部命名空間中將函數名稱綁定到一個函數對象(函數可執行代碼的包裝器),這個函數對象包含對當前全局命名空間的引用,作為函數被調用時所使用的全局命名空間。 函數定義的格式如下:
調用是函數在程序中的應用,函數定義并不會執行函數體;只有當函數被調用時才會執行此操作。
函數中可能使用到的特殊關鍵字是return語。return表示從函數調用輸出返回值。在執行return語句后函數結束。一個函數可能有多條return語句,執行的第一條return語句將結束函數。若函數沒有return語句則不返回值,這種不返回值的函數通常稱為過程。在這種情況下,默認返回None。
生成器函數
生成器函數是一個使用yield語句的函數或方法 。 這種函數在被調用時,總是返回一個可以執行該函數體的iterator對象:調用該迭代器的iterator.__next__() 方法將導致這個函數一直運行到它使用 yield 語句提供一個值。 當這個函數執行 return 語句或到達函數體末尾時,將引發StopIteration異常并且該迭代器將到達所返回的值集合的末尾。
協程函數
協程函數是使用async def來定義的函數或方法。這樣的函數在被調用時會返回一個coroutine對象。它可能包含await表達式以及async with和async for語句。
異步生成器函數
異步生成器函數是使用async def來定義并使用yield語句的函數或方法。這樣的函數在被調用時,將返回一個asynchronous iterator對象,該對象可在async for語句中被用來執行函數體。調用異步迭代器的aiterator.__anext__ 方法將返回一個awaitable,此對象會在被等待時執行直到使用yield產生一個值。 當函數執行到空的return語句或函數末尾時,將會引發 StopAsyncIteration 異常并且異步迭代器也將到達要產生的值集合的末尾。
內置函數
內置函數是對于C函數的外部封裝,如 len() 和 math.sin()。內置函數參數的數量和類型由C函數決定。內置方法是內置函數的另一種形式,包含了一個傳入C函數的對象作為隱式的額外參數,如alist.append(),其中alist為一個列表對象。
類
類提供了把數據和功能綁定在一起的方法。類是可調用對象,通常被用來創建自身實例,但也可以有重載 __new__() 的變體類型。 調用的參數會傳遞給 __new__(),通常也會傳遞給 __init__() 來初始化新的實例。任意類的實例可以通過在其所屬類中定義 __call__() 方法變成可調用對象。 Python的類只使用了很少的新語法和語義。Python的類支持面向對象編程的所有標準特性:類的繼承機制支持多個基類、派生的類能覆蓋基類的方法、類的方法能調用基類中的同名方法。對象可包含任意數量和類型的數據。類支持Python動態特性:在運行時創建,創建后還可以修改。
類定義
與函數定義一樣,類定義必須先執行才能生效,最簡單的類定義形式如下:
類定義內的語句通常都是函數定義,但也可以是其他語句。類里的函數定義一般是特殊的參數列表,這是由方法調用的約定規范所指明的。
當進入類定義時,將創建一個新的命名空間,并將其用作局部作用域。因此,所有對局部變量的賦值都是在這個新命名空間之內。函數定義會綁定到這里的新函數名稱。
類對象
類對象支持兩種操作:屬性引用和實例化。
屬性引用使用Python中屬性引用的標準語法: obj.name。 有效的屬性名稱是類對象被創建時存在于類命名空間中的名稱。若定義了如下的MyClass的類,那么MyClass.n和MyClass.func就是有效的屬性引用,分別返回一個整數和一個函數對象。
類的實例化使用函數表示法。 可以把類對象視為是返回該類的一個新實例的不帶參數的函數。實例化操作("調用 "類對象)會創建一個空對象。許多類都希望創建的對象實例能定制為特定的初始狀態。因此,類可能會定義一個名為 __init__() 的特殊方法。當一個類定義了 __init__() 方法時,類的實例化就會自動為新創建的類實例調用 __init__() 方法。__init__() 方法可以有參數,給類實例化操作符的參數會傳遞給 __init__() 方法。
繼承
派生類定義的語法如下:
派生類定義的執行過程與基類相同。 當構造類對象時,基類會被記住。 此信息將被用來解析屬性引用:如果請求的屬性在類中找不到,搜索將轉往基類中進行查找。 如果基類本身也派生自其他某個類,則此規則將被遞歸地應用。
派生類可能會重寫其基類的方法。 因為方法在調用同一對象的其他方法時沒有特殊權限,所以基類方法在嘗試調用同一基類中定義的另一方法時,可能實際上調用是該基類的派生類中定義的方法。
Python有兩個內置函數可被用于繼承機制:使用 isinstance() 來檢查一個實例的類型:isinstance(obj, int) 僅會在 obj.__class__ 為 int 或某個派生自int的類時為True;使用 issubclass() 來檢查類的繼承關系:issubclass(bool, int) 為True,因為bool是int的子類。 但是,issubclass(float, int)為False,因為float不是int的子類。
Python支持多重繼承。 帶有多個基類的類定義語句如下:
模塊
模塊是單獨的Python腳本,包含一組類和函數。模塊通過 import語句或者importlib.import_module() 和內置的 __import__() 等函數發起調用導入。 模塊對象不包含用于初始化模塊的代碼對象。
當一個模塊首次被導入時,Python會搜索該模塊,如果找到就創建一個module對象并初始化它。 如果指定名稱的模塊未找到,則會引發ModuleNotFoundError。 當發起調用導入機制時,Python會實現多種策略來搜索指定名稱的模塊。
為了幫助組織模塊并提供名稱層次結構,Python引入了包的概念。所有包都是模塊,但并非所有模塊都是包。所有模塊都有自己的名字。 子包名與其父包名會以點號分隔。Python 定義了兩種類型的包,常規包和命名空間包。 常規包是傳統的包類型,通常以一個包含 __init__.py 文件的目錄形式實現,當一個常規包被導入時,這個 __init__.py 文件會隱式地被執行,它所定義的對象會被綁定到該包命名空間中的名稱。命名空間包是由多個部分構成的,每個部分為父包增加一個子包,各個部分可能處于文件系統的不同位置,也可能處于 zip 文件中、網絡上,或者 Python 在導入期間可以搜索的其他地方。命名空間包沒有 parent/__init__.py 文件。
代碼示例
復合語句示例
if語句
while語句
for語句
try語句
with語句
match語句
函數和類
開發環境
文本編輯器
大部分可以編輯純文本的工具都可以用于編寫Python代碼,合適的編輯器可以有效減少代碼編寫時間,如表中所示編輯器均支持語法高亮顯示,并且可以通過插件擴展到靜態代碼檢查器(linters)和調試器。
解釋器
Python是一種解釋型語言,不需要編譯和鏈接,可以節省大量開發時間。它的解釋器實現了交互式操作,能試用各種語言功能,編寫臨時程序,或在自底向上的程序開發中測試功能。
集成開發環境
集成開發環境(英語:Integrated Development Environment,IDE)將進行Python開發所需的工具打包到一個用戶友好的圖形用戶界面中,具有如構建自動化、代碼校驗、測試和調試等功能。
標準庫
Python標準庫包含一部分的數據類型,例如數字、序列、映射。這個庫也包含了內置函數和異常,它們是不需要import 語句就可以在所有Python代碼中使用的對象。此外,標準庫主要是由一系列的模塊組成,這些模塊集可以不同方式分類。有些模塊是用C編寫并內置于Python解釋器中;另一些模塊則是用Python編寫并以源碼形式導入。有些模塊提供專用于Python的接口;有些模塊提供專用于特定操作系統的接口;另一些模塊則提供針對特定應用領域的接口。有些模塊在所有更新和移植版本的Python中可用;另一些模塊僅在底層系統支持或要求時可用;還有些模塊則僅當編譯和安裝Python時選擇了特定配置選項時才可用。
應用
GUI
圖形用戶界面(GUI)是用戶與軟件交互圖形界面。Python擁有一些GUI工具包,因此可以被應用于GUI工作。
Tkinter
Tkinter是Python標準庫自帶的GUI工具包。它提供了GUI應用所需要的幾乎所有功能部件,如:按鈕、文本、輸入框、標簽、復選框等,它的文本和畫布小部件足夠強大,可以實現網頁、三維可視化和動畫。因為它基于為腳本語言開發的庫,Tkinter是一個相對輕量級的工具包,因此它與Python等腳本語言很好地結合在一起。Tkinter易學易用,支持多平臺操作系統。
wxPython
wxPython是一個開源免費的Python GUI庫,支持多種平臺。它是基于C++ GUI庫wxWidgets開發的,因此它比Tkinter更復雜,提供了數百個類,通常需要面向對象的編碼風格。wxPython提供了比Tkinter更豐富小部件,如HTML查看器。
PyQt
PyQt是Qt工具包的Python接口,它是一個功能齊全的GUI庫,目前可在Windows、Mac OS 、unix和Linux上運行。與wxPython一樣,PyQt通常比Tkinter更復雜,但功能更豐富:它包含數百個類以及數千個函數和方法。BlackAdder和Qt Designer系統為PyQt提供GUI構建程序。
數據分析
Python有用于數據分析的第三方庫,其中常用的有numpy、pandas、Matplotlib等。
NumPy
NumPy是Python科學計算的基礎工具包。主要功能有:Ndarray,一個多維數組,提供了高效的存儲效率和向量運算能力;可以快速對某個數據塊進行某種運算,而無需取出單個元素進行操作;可對磁盤和內存文件進行操作;有標準的數學庫函數功能。此外,Numpy提供了一個C API,因此很容易將數據傳遞給由低級語言編寫的外部庫,外部庫也能以Numpy數組的形式將數據返回給Python。
Pandas
Pandas含有多種數據結構如DataFrame、Series等。Pandas是以numpy為基礎構建的,因此以Numpy為中心的應用,如果使用Pandas進行實現,將變得簡單高效。Pandas主要功能有:具備按軸自動或顯式數據對齊功能的數據結構;集成時間序列功能;提供的數據結構既能處理時間序列也能處理非時間序列;數學運算和約簡可以軸向執行;強大的缺失數據處理功能;合并常見數據庫中的關系型運算;一些數據標準化和數據轉換的功能等。
Matplotlib
Matplotlib是一個2D Python繪圖庫,該庫可以繪制具有出版質量的、跨平臺的、具有交互性的數據描述圖。在數據分析中,可以使用Matplotlib呈現對數據的分析處理過程, 形象地展示數據分析的結果。
測試
Python標準庫中包含單元測試模塊,可以用來測試Python代碼的質量和正確性。
unittest
unittest模塊支持測試的自動化處理,可以共享代碼測試的初始化和結束代碼、將測試用例封裝成一個測試套件以及測試的多元化顯示。unittest模塊支持單元測試的各種重要概念,其中最重要的概念是測試用例。unittest模塊提供了TestCase基類,用來創建新的測試用例。在unittest模塊中還有一個測試運行器,用來運行這些測試并為用戶提供輸出結果。unittest測試框架中使用TestRunner類來為測試的運行提供環境。
doctest
doctest模塊可以利用代碼注釋中的文檔內容,這種處理方式使得文檔可以作為測試代碼來執行。doctest作為一種測試框架,可以實現文檔和代碼的同步,并可以作為書寫教程的一個工具。另外,可以將文檔字符串變成可執行文檔,從而完成對代碼的測試。
Web開發
Web開發框架定義了一系列關于Web開發的處理方式和模板,使Web開發人員更加關注于應用的業務邏輯。在Python 語言中,有多種Web開發框架。
Zope
Zope是主要使用Python語言開發的開放源代碼Web應用服務器,可以運行在包括 Linux、Windows 等多種系統平臺上。其使用組件模式開發,可以很方便地加入所需的模塊。它的主要功能包括多種數據庫適配器、內置的Web服務器、多協議支持、索引和查找、內置安全模型和集群等。
TurboGears
TurboGears框架的目的是將現在各個層次中最優秀的組件組合起來,形成一個簡單易用、對用戶友好的框架。通過組合方式,使得Web開發者可以使用Python中各個層次被推薦的模塊。用戶也可以通過修改對部分組件進行替換。這種整合方式,使得TurboGears框架提供了Web開發從前端到后端的整合。
Django
Django是一個完整的快速Web開發框架。在Django框架中包含開發Web網絡應用所需的組件,這些組件包括數據庫的對象關系映射、動態內容管理的模板系統和富的管理界面。在 Django架中沒有使用像TurboGears框架中那樣的第三方Python 模塊。在 Django框架中可以使用管理腳本文件manage.py、mob_Python或者FastCGI模塊來構建簡單的開發服務器。
圖像處理
Python有第三方模塊提供了圖像處理功能。
PythonMagick
PythonMagick是一個ImageMagick軟件包的Python綁定。ImageMagick是一款可以運行在多種系統平臺下的用來創建、編輯和合成位圖的軟件庫。使用ImageMagick圖像處理套件可以轉換、旋轉縮放、裁剪圖像,也可以對圖像進行色彩處理等操作。除此之外,還可以在圖像上實現一些特殊的效果包括在位圖上寫字和畫上一些簡單的圖形。PythonMagick作為ImageMagick套件的Python語言綁定,實現了ImageMagick套件的功能。可以通過使用PythonMagick來實現對圖形圖像的處理,如裁剪等操作。
OpenCV
OpenCV(Open Source 計算機 Vision)庫是一個用于計算機視覺處理方面的圖像庫。它關注于對圖像進行高級處理的功能,包括人臉識別、動作識別和軌跡建模等。OpenCV庫有Python語言的綁定,可以通過Python來訪問OpenCV所提供的功能。
網絡編程
Socket編程是實現網絡應用程序的基礎。Python標準庫有socket模塊,支持套接字接口。該模塊中有生成套接字、等待連接、建立連接和傳輸數據的方法。
Python的Twisted框架適合編寫服務器端的應用程序,提供了異步通信機制。Twisted 框架是由模塊化的件組成的,這些模塊化元素包括協議、工廠、反應器(reactor)和Deferred對象等。
游戲開發
Python中有綁定的游戲開發庫可以輔助開發,如Pygame。PyGame是一個基于SDL(Simple Direct Media Layer,簡易直控媒體層)的游戲開發環境,SDL是一個可以運行在多個系統平臺下的非常成熟的圖形和多媒體庫。構建Pygame的兩大基石Python和SDL都具有良好的跨平臺性,因此Pygame也可以運行在多個系統平臺下。通過使用Pygame庫可以有效的處理用戶的輸入輸出和控制多媒體資源。
參考資料 >
歷史和許可證.python3.11.4文檔.2023-08-23
Python 2.0 有什么新變化.python3.11.4文檔.2023-08-23
更新日志.Python 3.11.5 文檔.2023-09-04
TIOBE index.TIOBE.2023-08-23
General Python FAQ.Python 3.11.5 Documentation .2023-09-02
Python 2.0 有什么新變化.Python 3.11.5 文檔.2023-09-04
Python 2.7 有什么新變化.Python 3.11.5 文檔.2023-09-04
Status of Python Versions.Python Developer's Guide.2023-09-04
Python 3.0 有什么新變化.Python 3.11.5 文檔.2023-09-04
Python 3.5 有什么新變化. Python 3.13.0a0 文檔.2023-09-11
Python 3.6 有什么新變化. Python 3.13.0a0 文檔.2023-09-11
Python 3.7 有什么新變化.Python 3.11.5 文檔.2023-09-04
Python 3.10 有什么新變化.Python 3.11.5 文檔.2023-09-04
Python 3.11 有什么新變化.Python 3.11.5 文檔.2023-09-04
詞法分析.Python3.11.4文檔.2023-08-24
數據模型.Python 3.11.4文檔.2023-08-24
表達式.Python 3.11.4文檔.2023-08-24
簡單語句.Python 3.11.4文檔.2023-08-24
復合語句.Python 3.11.4文檔.2023-08-24
數據模型.Python 3.11.5文檔.2023-09-03
復合語句.Python 3.11.4文檔.2023-08-24
內置函數.Python 3.11.4文檔.2023-08-24
類.Python 3.11.4文檔.2023-08-24
導入系統.Python 3.11.4文檔.2023-08-24
課前甜點.Python 3.11.5 文檔.2023-09-11
概述.Python 3.11.5 文檔.2023-09-11
EDU-SIG: Python in Education.Pyhton.2023-09-02
Python標準庫.Python 3.11.4文檔.2023-08-24
標準庫簡介.Python 3.11.5 文檔.2023-09-05
標準庫簡介 —— 第二部分.Python 3.11.5 文檔.2023-09-05