求真百科歡迎當事人提供第一手真實資料,洗刷冤屈,終結網路霸凌。

Python檢視原始碼討論檢視歷史

事實揭露 揭密真相
前往: 導覽搜尋
Python

Python由荷蘭數學和計算機科學研究學會的Guido van Rossum 於1990 年代初設計,作為一門叫做ABC語言的替代品。

Python提供了高效的高級數據結構,還能簡單有效地面向對象編程。Python語法和動態類型,以及解釋型語言的本質,使它成為多數平台上寫腳本和快速開發應用的編程語言, 隨着版本的不斷更新和語言新功能的添加,逐漸被用於獨立的、大型項目的開發。

Python解釋器易於擴展,可以使用C或C++(或者其他可以通過C調用的語言)擴展新的功能和數據類型。Python 也可用於可定製化軟件中的擴展程序語言。Python豐富的標準庫,提供了適用於各個主要系統平台的源碼或機器碼。

軟件名稱Python軟件平台Windows、Linux、UNIX、Mac OS等上線時間1990年最近更新時間2021年9月4日軟件語言Python開發商Python Software

目錄=

發展歷程

語言特點

基本語法

幫助

接口

應用領域

開發工具

標準庫

開發環境

著名應用

學習網站

下載安裝

發展歷程

自從20世紀90年代初Python語言誕生至今,它已被逐漸廣泛應用於系統管理任務的處理和Web編程。 1995 年,Guido van Rossum 在弗吉尼亞州的國家創新研究公司(CNRI)繼續他在 Python 上的工作,並在那裡發布了該軟件的多個版本。 [1] 2000 年五月,Guido van Rossum和 Python 核心開發團隊轉到 BeOpen.com 並組建了 BeOpen PythonLabs 團隊。 同年十月,BeOpen PythonLabs 團隊轉到 Digital Creations (現為 Zope Corporation)。 2001 年,Python 軟件基金會 (PSF) 成立,這是一個專為擁有 Python 相關知識產權而創建的非營利組織。 Zope Corporation 現在是 PSF 的贊助成員。

Python的創始人為荷蘭人吉多·范羅蘇姆(Guido van Rossum)。1989年聖誕節期間,在阿姆斯特丹,Guido為了打發聖誕節的無趣,決心開發一個新的腳本解釋程序,作為ABC語言的一種繼承。之所以選中Python(大蟒蛇的意思)作為該編程語言的名字,是取自英國20世紀70年代首播的電視喜劇《蒙提·派森的飛行馬戲團》(Monty Python's Flying Circus)。

ABC是由Guido參加設計的一種教學語言。就Guido本人看來,ABC這種語言非常優美和強大,是專門為非專業程序員設計的。但是ABC語言並沒有成功,究其原因,Guido認為是其非開放造成的。Guido決心在Python中避免這一錯誤。同時,他還想實現在ABC中閃現過但未曾實現的東西。

就這樣,Python在Guido手中誕生了。可以說,Python是從ABC發展起來,主要受到了Modula-3(另一種相當優美且強大的語言,為小型團體所設計的)的影響。並且結合了Unix shell和C的習慣。

Python已經成為最受歡迎的程序設計語言之一。自從2004年以後,python的使用率呈線性增長。Python 2於2000年10月16日發布,穩定版本是Python 。Python 3於2008年12月3日發布,不完全兼容Python2011年1月,它被TIOBE編程語言排行榜評為2010年度語言。

由於Python語言的簡潔性、易讀性以及可擴展性,在國外用Python做科學計算的研究機構日益增多,一些知名大學已經採用Python來教授程序設計課程。例如卡耐基梅隆大學的編程基礎、麻省理工學院的計算機科學及編程導論就使用Python語言講授。眾多開源的科學計算軟件包都提供了Python的調用接口,例如著名的計算機視覺庫OpenCV、三維可視化庫VTK、醫學圖像處理庫ITK。而Python專用的科學計算擴展庫就更多了,例如如下3個十分經典的科學計算擴展庫:NumPy、SciPy和matplotlib,它們分別為Python提供了快速數組處理、數值運算以及繪圖功能。

因此Python語言及其眾多的擴展庫所構成的開發環境十分適合工程技術、科研人員處理實驗數據、製作圖表,甚至開發科學計算應用程序。2018年3月,該語言作者在郵件列表上宣布Python 2.7將於2020年1月1日終止支持。用戶如果想要在這個日期之後繼續得到與Python 2.7有關的支持,則需要付費 優點

簡單:Python是一種代表簡單主義思想的語言。閱讀一個良好的Python程序就感覺像是在讀英語一樣。它使你能夠專注於解決問題而不是去搞明白語言本身。

易學:Python極其容易上手,因為Python有極其簡單的說明文檔。

易讀、易維護:風格清晰劃一、強制縮進

用途廣泛

速度快:Python 的底層是用 C 語言寫的,很多標準庫和第三方庫也都是用 C 寫的,運行速度非常快。

免費、開源:Python是FLOSS(自由/開放源碼軟件)之一。使用者可以自由地發布這個軟件的拷貝、閱讀它的源代碼、對它做改動、把它的一部分用於新的自由軟件中。FLOSS是基於一個團體分享知識的概念。

高層語言:用Python語言編寫程序的時候無需考慮諸如如何管理你的程序使用的內存一類的底層細節。

可移植性:由於它的開源本質,Python已經被移植在許多平台上(經過改動使它能夠工作在不同平台上)。這些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基於linux開發的android平台。

解釋性:一個用編譯性語言比如C或C++寫的程序可以從源文件(即C或C++語言)轉換到一個你的計算機使用的語言(二進制代碼,即0和1)。這個過程通過編譯器和不同的標記、選項完成。

運行程序的時候,連接/轉載器軟件把你的程序從硬盤複製到內存中並且運行。而Python語言寫的程序不需要編譯成二進制代碼。你可以直接從源代碼運行 程序。

在計算機內部,Python解釋器把源代碼轉換成稱為字節碼的中間形式,然後再把它翻譯成計算機使用的機器語言並運行。這使得使用Python更加簡單。也使得Python程序更加易於移植。

面向對象:Python既支持面向過程的編程也支持面向對象的編程。在「面向過程」的語言中,程序是由過程或僅僅是可重用代碼的函數構建起來的。在「面向對象」的語言中,程序是由數據和功能組合而成的對象構建起來的。

Python是完全面向對象的語言。函數、模塊、數字、字符串都是對象。並且完全支持繼承、重載、派生、多繼承,有益於增強源代碼的復用性。Python支持重載運算符和動態類型。相對於Lisp這種傳統的函數式編程語言,Python對函數式設計只提供了有限的支持。有兩個標準庫(functools, itertools)提供了Haskell和Standard ML中久經考驗的函數式程序設計工具。

可擴展性、可擴充性:如果需要一段關鍵代碼運行得更快或者希望某些算法不公開,可以部分程序用C或C++編寫,然後在Python程序中使用它們。 Python本身被設計為可擴充的。並非所有的特性和功能都集成到語言核心。Python提供了豐富的API和工具,以便程序員能夠輕鬆地使用C語言、C++、Cython來編寫擴充模塊。Python編譯器本身也可以被集成到其它需要腳本語言的程序內。因此,很多人還把Python作為一種「膠水語言」(glue language)使用。使用Python將其他語言編寫的程序進行集成和封裝。在Google內部的很多項目,例如Google Engine使用C++編寫性能要求極高的部分,然後用Python或Java/Go調用相應的模塊。《Python技術手冊》的作者馬特利(Alex Martelli)說:「這很難講,不過,2004 年,Python 已在Google 內部使用,Google 召募許多 Python 高手,但在這之前就已決定使用Python,他們的目的是 Python where we can, C++ where we must,在操控硬件的場合使用C++,在快速開發時候使用 Python。」

可嵌入性:可以把Python嵌入C/C++程序,從而向程序用戶提供腳本功能。

豐富的庫:Python標準庫確實很龐大。它可以幫助處理各種工作,包括正則表達式、文檔生成、單元測試、線程、數據庫、網頁瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV文件、密碼系統、GUI(圖形用戶界面)、Tk和其他與系統有關的操作。這被稱作Python的「功能齊全」理念。除了標準庫以外,還有許多其他高質量的庫,如wxPython、Twisted和Python圖像庫等等。

規範的代碼:Python採用強制縮進的方式使得代碼具有較好可讀性。而Python語言寫的程序不需要編譯成二進制代碼。Python的作者設計限制性很強的語法,使得不好的編程習慣(例如if語句的下一行不向右縮進)都不能通過編譯。其中很重要的一項就是Python的縮進規則。一個和其他大多數語言(如C)的區別就是,一個模塊的界限,完全是由每行的首字符在這一行的位置來決定(而C語言是用一對花括號{}來明確的定出模塊的邊界,與字符的位置毫無關係)。通過強制程序員們縮進(包括if,for和函數定義等所有需要使用模塊的地方),Python確實使得程序更加清晰和美觀。

高級動態編程:雖然Python可能被粗略地分類為「腳本語言」(script language),但實際上一些大規模軟件開發計劃例如Zope、Mnet及BitTorrent,Google也廣泛地使用它。Python的支持者較喜歡稱它為一種高級動態編程語言,原因是「腳本語言」泛指僅作簡單程序設計任務的語言,如shellscript、VBScript等只能處理簡單任務的編程語言,並不能與Python相提並論。

做科學計算優點多:說起科學計算,首先會被提到的可能是MATLAB。除了MATLAB的一些專業性很強的工具箱還無法被替代之外,MATLAB的大部分常用功能都可以在Python世界中找到相應的擴展庫。和MATLAB相比,用Python做科學計算有如下優點:

● 首先,MATLAB是一款商用軟件,並且價格不菲。而Python完全免費,眾多開源的科學計算庫都提供了Python的調用接口。用戶可以在任何計算機上免費安裝Python及其絕大多數擴展庫。

● 其次,與MATLAB相比,Python是一門更易學、更嚴謹的程序設計語言。它能讓用戶編寫出更易讀、易維護的代碼。

● 最後,MATLAB主要專注於工程和科學計算。然而即使在計算領域,也經常會遇到文件管理、界面設計、網絡通信等各種需求。而Python有着豐富的擴展庫,可以輕易完成各種高級任務,開發者可以用Python實現完整應用程序所需的各種功能。

缺點

單行語句和命令行輸出問題:很多時候不能將程序連寫成一行,如import sys;for i in sys.path:print i。而perl和awk就無此限制,可以較為方便的在shell下完成簡單程序,不需要如Python一樣,必須將程序寫入一個.py文件。

給初學者帶來困惑:獨特的語法,這也許不應該被稱為局限,但是它用縮進來區分語句關係的方式還是給很多初學者帶來了困惑。即便是很有經驗的Python程序員,也可能陷入陷阱當中。

運行速度慢:這裡是指與C和C++相比。Python開發人員儘量避開不成熟或者不重要的優化。一些針對非重要部位的加快運行速度的補丁通常不會被合併到Python內。所以很多人認為Python很慢。不過,根據二八定律,大多數程序對速度要求不高。在某些對運行速度要求很高的情況,Python設計師傾向於使用JIT技術,或者用使用C/C++語言改寫這部分程序。可用的JIT技術是PyPy。

和其他語言區別

對於一個特定的問題,只要有一種最好的方法來解決

這在由Tim Peters寫的Python格言(稱為The Zen of Python)裡面表述為:There should be one-- and preferably only one --obvious way to do it. 這正好和Perl語言(另一種功能類似的高級動態語言)的中心思想TMTOWTDI(There's More Than One Way To Do It)完全相反。 Python的設計哲學是「優雅」、「明確」、「簡單」。因此,Perl語言中「總是有多種方法來做同一件事」的理念在Python開發者中通常是難以忍受的。Python開發者的哲學是「用一種方法,最好是只有一種方法來做一件事」。在設計Python語言時,如果面臨多種選擇,Python開發者一般會拒絕花俏的語法,而選擇明確的沒有或者很少有歧義的語法。由於這種設計觀念的差異,Python源代碼通常被認為比Perl具備更好的可讀性,並且能夠支撐大規模的軟件開發。這些準則被稱為Python格言。在Python解釋器內運行import this可以獲得完整的列表。

更高級的Virtual Machine

Python在執行時,首先會將.py文件中的源代碼編譯成Python的byte code(字節碼),然後再由Python Virtual Machine(Python虛擬機)來執行這些編譯好的byte code。這種機制的基本思想跟Java,.NET是一致的。然而,Python Virtual Machine與Java或.NET的Virtual Machine不同的是,Python的Virtual Machine是一種更高級的Virtual Machine。這裡的高級並不是通常意義上的高級,不是說Python的Virtual Machine比Java或.NET的功能更強大,而是說和Java 或.NET相比,Python的Virtual Machine距離真實機器的距離更遠。或者可以這麼說,Python的Virtual Machine是一種抽象層次更高的Virtual Machine。基於C的Python編譯出的字節碼文件,通常是.pyc格式。除此之外,Python還可以以交互模式運行,比如主流操作系統Unix/Linux、Mac、Windows都可以直接在命令模式下直接運行Python交互環境。直接下達操作指令即可實現交互操作。

基本語法

Python的設計目標之一是讓代碼具備高度的可閱讀性。它設計時儘量使用其它語言經常使用的標點符號和英文單字,讓代碼看起來整潔美觀。它不像其他的靜態語言如C、Pascal那樣需要重複書寫聲明語句,也不像它們的語法那樣經常有特殊情況和意外。 Python開發者有意讓違反了縮進規則的程序不能通過編譯,以此來強制程序員養成良好的編程習慣。並且Python語言利用縮進表示語句塊的開始和退出(Off-side規則),而非使用花括號或者某種關鍵字。增加縮進表示語句塊的開始,而減少縮進則表示語句塊的退出。縮進成為了語法的一部分。例如if語句:python3

age = int(input("請輸入你的年齡: ")) if age < 21: print("你不能買酒。") print("不過你能買口香糖。") print("這句話在if語句塊的外面。") 根據PEP的規定,必須使用4個空格來表示每級縮進。使用Tab字符和其它數目的空格雖然都可以編譯通過,但不符合編碼規範。支持Tab字符和其它數目的空格僅僅是為兼容很舊的的Python程序和某些有問題的編輯程序

控制語句

if語句,當條件成立時運行語句塊。經常與else, elif(相當於else if) 配合使用。 for語句,遍歷列表、字符串、字典、集合等迭代器,依次處理迭代器中的每個元素。 while語句,當條件為真時,循環運行語句塊。 try語句,與except,finally配合使用處理在程序運行中出現的異常情況。 class語句,用於定義類型。 def語句,用於定義函數和類型的方法。 pass語句,表示此行為空,不運行任何操作。 assert語句,用於程序調試階段時測試運行條件是否滿足。 with語句,Python2.6以後定義的語法,在一個場景中運行語句塊。比如,運行語句塊前加密,然後在語句塊運行退出後解密。 yield語句,在迭代器函數內使用,用於返回一個元素。自從Python 2.5版本以後。這個語句變成一個運算符。 raise語句,製造一個錯誤。 import語句,導入一個模塊或包。 from … import語句,從包導入模塊或從模塊導入某個對象。 import … as語句,將導入的對象賦值給一個變量。 in語句,判斷一個對象是否在一個字符串/列表/元組裡。

表達式

Python的表達式寫法與C/C++類似。只是在某些寫法有所差別。 主要的算術運算符與C/C++類似。+, -, *, /, //, **, ~, %分別表示加法或者取正、減法或者取負、乘法、除法、整除、乘方、取補、取余。 Python使用and, or, not表示邏輯運算。 is, is not用於比較兩個變量是否是同一個對象。in, not in用於判斷一個對象是否屬於另外一個對象。 Python支持「列表推導式」(list comprehension),比如計算0-9的平方和:

Python使用y if cond else x表示條件表達式。意思是當cond為真時,表達式的值為y,否則表達式的值為x。相當於C++和Java里的cond?y:x。 Python區分列表(list)和元組(tuple)兩種類型。list的寫法是[1,2,3],而tuple的寫法是(1,2,3)。可以改變list中的元素,而不能改變tuple。在某些情況下,tuple的括號可以省略。tuple對於賦值語句有特殊的處理。因此,可以同時賦值給多個變量,比如: 1 >>> x, y=1,2 # 同時給x,y賦值,最終結果:x=1, y=2 特別地,可以使用以下這種形式來交換兩個變量的值: 1 >>> x, y=y, x #最終結果:y=1, x=2 Python使用'(單引號)和"(雙引號)來表示字符串。與Perl、Unix Shell語言或者Ruby、Groovy等語言不一樣,兩種符號作用相同。一般地,如果字符串中出現了雙引號,就使用單引號來表示字符串;反之則使用雙引號。如果都沒有出現,就依個人喜好選擇。出現在字符串中的\(反斜槓)被解釋為特殊字符,比如\n表示換行符。表達式前加r指示Python不解釋字符串中出現的\。這種寫法通常用於編寫正則表達式或者Windows文件路徑。 Python支持列表切割(list slices),可以取得完整列表的一部分。支持切割操作的類型有str, bytes, list, tuple等。它的語法是...[left:right]或者...[left:right:stride]。假定nums變量的值是[1, 3, 5, 7, 8, 13, 20],那麼下面幾個語句為真: nums[2:5] == [5, 7, 8] 從下標為2的元素切割到下標為5的元素,但不包含下標為5的元素。 nums[1:] == [3, 5, 7, 8, 13, 20] 切割到最後一個元素。 nums[:-3] == [1, 3, 5, 7] 從最開始的元素一直切割到倒數第3個元素。 nums[:] == [1, 3, 5, 7, 8, 13, 20] 返回所有元素。改變新的列表不會影響到nums。 nums[1:5:2] == [3, 7] 從下標為1的元素切割到下標為5的元素,且步長為2。 函數 Python的函數支持遞歸、默認參數值、可變參數,但不支持函數重載。為了增強代碼的可讀性,可以在函數後書寫「文檔字符串」(Documentation Strings,或者簡稱docstrings),用於解釋函數的作用、參數的類型與意義、返回值類型與取值範圍等。可以使用內置函數help()打印出函數的使用幫助。比如: >>> def randint(a, b): ... "Return random integer in range [a, b], including both end points."... >>> help(randint) Help on function randint in module __main__: randint(a, b) Return random integer inrange[a, b], including both end points.

對象的方法

對象的方法是指綁定到對象的函數。調用對象方法的語法是instance.method(arguments)。它等價於調用Class.method(instance, arguments)。當定義對象方法時,必須顯式地定義第一個參數,一般該參數名都使用self,用於訪問對象的內部數據。這裡的self相當於C++, Java裡面的this變量,但是我們還可以使用任何其它合法的參數名,比如this 和 mine 等,self與C++,Java裡面的this不完全一樣,它可以被看作是一個習慣性的用法,我們傳入任何其它的合法名稱都行,比如:

class Fish: def eat(self,food): if food is not None: self.hungry=False

class User: def __init__(myself,name): myself.name=name

  1. 構造Fish的實例:

f=Fish()

  1. 以下兩種調用形式是等價的:

Fish.eat(f,"earthworm") f.eat("earthworm") u=User('username') print(u.name) Python認識一些以「__」開始並以「__」結束的特殊方法名,它們用於實現運算符重載和實現多種特殊功能。

類型

Python採用動態類型系統。在編譯的時候,Python不會檢查對象是否擁有被調用的方法或者屬性,而是直至運行時,才做出檢查。所以操作對象時可能會拋出異常。不過,雖然Python採用動態類型系統,它同時也是強類型的。Python禁止沒有明確定義的操作,比如數字加字符串。

與其它面向對象語言一樣,Python允許程序員定義類型。構造一個對象只需要像函數一樣調用類型即可,比如,對於前面定義的Fish類型,使用Fish()。類型本身也是特殊類型type的對象(type類型本身也是type對象),這種特殊的設計允許對類型進行反射編程。

Python內置豐富的數據類型。與Java、C++相比,這些數據類型有效地減少代碼的長度。下面這個列表簡要地描述了Python內置數據類型(適用於Python 3.x): 類型 描述 例子 備註 str(string/字符串) 一個由字符組成的不可更改的有序串行。 'Wikipedia' "Wikipedia" """Spanning multiple lines""" 在Python 3.x里,字符串由Unicode字符組成 bytes(字節) 一個由字節組成的不可更改的有序串行。 b'Some ASCII' b"Some ASCII" 在Python 2.x里,bytes為str的一種 list(列表) 可以包含多種類型的可改變的有序串行 [4.0, 'string', True] 無 tuple(元組) 可以包含多種類型的不可改變的有序串行 (4.0, 'string', True) 無 set, frozenset 與數學中集合的概念類似。無序的、每個元素都是唯一的。 {4.0, 'string', True} frozenset([4.0, 'string', True]) 無 dict(字典) 一個可改變的由鍵值對組成的無序串行。 {'key1': 1.0, 3: False} 無 int(整數) 精度不限的整數 42 無 float(浮點數) 浮點數。精度與系統相關。 3.1415927 無 complex 複數 3+2.7j 無 bool 邏輯值。只有兩個值:真、假 True False 無 builtin_function_or_method 自帶的函數,不可更改也不可增加 print input 無 type(類型) 顯示某個值的類型,用type(x)獲得 type(1) -> type(『1』) -> 無 range 按順序排列的數 range(10) ......list(range(10))->[0,1,2,3,4,5,6,7,8,9] range(1,10) ......list(range(1,10))->[1,2,3,4,5,6,7,8,9] range(1,10,2) ......list(range(1,10,2))->[1,3,5,7,9] 在Python 2.x中,range為builtin_function_or_method,獲得的數為list 除了各種數據類型,Python語言還用類型來表示函數、模塊、類型本身、對象的方法、編譯後的Python代碼、運行時信息等等。因此,Python具備很強的動態性。 數學運算 Python使用與C、Java類似的運算符,支持整數與浮點數的數學運算。同時還支持複數運算與無窮位數(實際受限於計算機的能力)的整數運算。除了求絕對值函數abs()外,大多數數學函數處於math和cmath模塊內。前者用於實數運算,而後者用於複數運算。使用時需要先導入它們,比如:

>>> import math >>> print(math.sin(math.pi/2)) 1.0 fractions模塊用於支持分數運算;decimal模塊用於支持高精度的浮點數運算。

Python定義求余運行a % b的值處於開區間[0, b)內,如果b是負數,開區間變為(b, 0]。這是一個很常見的定義方式。不過其實它依賴於整除的定義。為了讓方程式:b * (a // b) + a % b = a恆真,整除運行需要向負無窮小方向取值。比如7 // 3的結果是2,而(-7) // 3的結果卻是-3。這個算法與其它很多編程語言不一樣,需要注意,它們的整除運算會向0的方向取值。

Python允許像數學的常用寫法那樣連着寫兩個比較運行符。比如a < b < c與a < b and b < c等價。C++的結果與Python不一樣,首先它會先計算a < b,根據兩者的大小獲得0或者1兩個值之一,然後再與c進行比較。

幫助

1. 列出模塊中的函數 用import導入模塊後,可使用函數dir(m)列出模塊的所有函數,import是導入模塊的命令,m是模塊名。

>>>import math >>>dir(math) ['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc'] 這個例子列出math模塊的一些函數,以雙下劃線( _ _ )開頭的名稱用於較複雜的python編程。 2.查看完整的python內置函數清單 查看完整的python內置函數清單,可在提示符後輸入 >>>dir(_ _builtins_ _)。

['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '_', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']

3. 查看某個函數的文檔幫助信息

可以用函數help(函數)來查看某個函數的文檔幫助信息。

>>>help(sum) Help on built-in function sum in module builtins: sum(iterable, start=0, /) Return the sum of a 'start' value (default: 0) plus an iterable of numbers When the iterable is empty, return the start value. This function is intended specifically for use with numeric values and may reject non-numeric types. 可以直接在提示符下輸入help(),然後輸入某個模塊或函數名得到詳細的幫助信息。

接口

CGI 目前由NCSA維護,NCSA定義CGI如下: CGI(Common Gateway Interface),通用網關接口,它是一段程序,運行在服務器上如:HTTP服務器,提供同客戶端HTML頁面的接口。 CGI程序可以是Python腳本、Perl腳本、Shell腳本、C或者C++程序等。

服務器

在你進行CGI編程前,確保您的Web服務器支持CGI及已經配置了CGI的處理程序。 所有的HTTP服務器執行CGI程序都保存在一個預先配置的目錄。這個目錄被稱為CGI目錄,並按照慣例,它被命名為/var/www/cgi-bin目錄。 CGI文件的擴展名為.cgi,python也可以使用.py擴展名。 默認情況下,Linux服務器配置運行的cgi-bin目錄中為/var/www。 如果想指定的其他運行CGI腳本的目錄,可以修改httpd.conf配置文件,如下所示: <Directory"/var/www/cgi-bin"> Allow Override None Options ExecCGI Order allow,deny Allow from all </Directory> <Directory"/var/www/cgi-bin"> Options All </Directory> 程序 使用Python創建第一個CGI程序,文件名為hello.py,文件位於/var/www/cgi-bin目錄中,內容如下,修改文件的權限為755: [7]

  1. !/usr/bin/env python

print("Content-type:text/html\r\n\r\n") print("<html>") print("<head>") print("") print("</head>") print("<body>")

print("

Hello World! This is my first CGI program

")

print("</body>") print("</html>") 以上程序在瀏覽器訪問顯示結果如下: Hello World! This is my first CGI program 這個的hello.py腳本是一個簡單的Python腳本,腳本第一的輸出內容"Content-type:text/html\r\n\r\n"發送到瀏覽器並告知瀏覽器顯示的內容類型為"text/html"。 環境變量 所有的CGI程序都接收以下的環境變量,這些變量在CGI程序中發揮了重要的作用: [7] 變量名 描述 CONTENT_TYPE 這個環境變量的值指示所傳遞來的信息的MIME類型。目前,環境變量CONTENT_TYPE一般都是:application/x-www-form-urlencoded,他表示數據來自於HTML表單。 CONTENT_LENGTH 如果服務器與CGI程序信息的傳遞方式是POST,這個環境變量即使從標準輸入STDIN中可以讀到的有效數據的字節數。這個環境變量在讀取所輸入的數據時必須使用。 HTTP_COOKIE 客戶機內的 COOKIE 內容。 HTTP_USER_AGENT 提供包含了版本數或其他專有數據的客戶瀏覽器信息。 PATH_INFO 這個環境變量的值表示緊接在CGI程序名之後的其他路徑信息。它常常作為CGI程序的參數出現。 QUERY_STRING 如果服務器與CGI程序信息的傳遞方式是GET,這個環境變量的值即使所傳遞的信息。這個信息經跟在CGI程序名的後面,兩者中間用一個問號'?'分隔。 REMOTE_ADDR 這個環境變量的值是發送請求的客戶機的IP地址,例如上面的192.168.1.67。這個值總是存在的。而且它是Web客戶機需要提供給Web服務器的唯一標識,可以在CGI程序中用它來區分不同的Web客戶機。 REMOTE_HOST 這個環境變量的值包含發送CGI請求的客戶機的主機名。如果不支持你想查詢,則無需定義此環境變量。 REQUEST_METHOD 提供腳本被調用的方法。對於使用 HTTP/1.0 協議的腳本,僅 GET 和 POST 有意義。 SCRIPT_FILENAME CGI腳本的完整路徑 SCRIPT_NAME CGI腳本的的名稱 SERVER_NAME 這是你的 WEB 服務器的主機名、別名或IP地址。 SERVER_SOFTWARE 這個環境變量的值包含了調用CGI程序的HTTP服務器的名稱和版本號。例如,上面的值為Apache/2.2.14(Unix) 以下是一個簡單的CGI腳本輸出CGI的環境變量:

  1. !/usr/bin/python

import os print"Content-type:text/html\r\n\r\n" print"Environment" for param in os.environ.keys(): print"%20s:%s<\br>" %(param,os.environ[param])

應用領域

Python是一種解釋型腳本語言以應用於以下領域: Web 和 Internet開發 科學計算和統計 人工智能 桌面界面開發 軟件開發 後端開發 網絡接口:能方便進行系統維護和管理,Linux下標誌性語言之一,是很多系統管理員理想的編程工具。 圖形處理:有PIL、Tkinter等圖形庫支持,能方便進行圖形處理。 數學處理:NumPy擴展提供大量與許多標準數學庫的接口。 文本處理:python提供的re模塊能支持正則表達式,還提供SGML,XML分析模塊,許多程序員利用python進行XML程序的開發。 數據庫編程:程序員可通過遵循Python DB-API(應用程序編程接口)規範的模塊與Microsoft SQL Server,Oracle,Sybase,DB2,MySQL、SQLite等數據庫通信。python自帶有一個Gadfly模塊,提供了一個完整的SQL環境。 網絡編程:提供豐富的模塊支持sockets編程,能方便快速地開發分布式應用程序。很多大規模軟件開發計劃例如Zope,Mnet 及BitTorrent. Google都在廣泛地使用它。 Web編程:應用的開發語言,支持最新的XML技術。 多媒體應用:Python的PyOpenGL模塊封裝了「OpenGL應用程序編程接口」,能進行二維和三維圖像處理。PyGame模塊可用於編寫遊戲軟件。 pymo引擎:PYMO全稱為python memories off,是一款運行於Symbian S60V3,Symbian3,S60V5, Symbian3, Android系統上的AVG遊戲引擎。因其基於python2.0平台開發,並且適用於創建秋之回憶(memories off)風格的AVG遊戲,故命名為PYMO。 黑客編程:python有一個hack的庫,內置了你熟悉的或不熟悉的函數,但是缺少成就感。 用Python寫簡單爬蟲 首先,要通過urllib2這個Module獲得對應的HTML源碼。(PS:在python3.3之後urllib2已經不能再用,代之以urllib)

import urllib2 #調用urllib2 url='http://www.baidu.com/s?wd=cloga' #把等號右邊的網址賦值給url html=urllib2.urlopen(url).read() #html隨意取名 等號後面的動作是打開源代碼頁面,並閱讀 print html #打印 通過上面這三句就可以將URL的源碼存在content變量中,其類型為字符型。 接下來是要從這堆HTML源碼中提取我們需要的內容。用Chrome查看一下對應的內容的代碼(也可以用Firefox的Firebug)。 可以看到url的信息存儲在span標籤中,要獲取其中的信息可以用正則表達式。 開發工具編輯 語音 Tkinter Python默認的圖形界面接口。Tkinter是一個和Tk接口的Python模塊,Tkinter庫提供了對Tk API的接口,它屬於Tcl/Tk的GUI工具組。 PyGTK 用於python GUI程序開發的GTK+庫。GTK就是用來實現GIMP和Gnome的庫。 PyQt 用於python的Qt開發庫。QT就是實現了KDE環境的那個庫,由一系列的模塊組成,有qt, qtcanvas, qtgl, qtnetwork, qtsql, qttable, qtui and qtxml,包含有300個類和超過5750個的函數和方法。PyQt還支持一個叫qtext的模塊,它包含一個QScintilla庫。該庫是Scintillar編輯器類的Qt接口。 wxPython GUI編程框架,熟悉MFC的人會非常喜歡,簡直是同一架構(對於初學者或者對設計要求不高的用戶來說,使用Boa Constructor可以方便迅速的進行wxPython的開發)屬於外置庫,要先下載。 PIL python提供強大的圖形處理的能力,並提供廣泛的圖形文件格式支持,該庫能進行圖形格式的轉換、打印和顯示。還能進行一些圖形效果的處理,如圖形的放大、縮小和旋轉等。是Python用戶進行圖象處理的強有力工具。 Psyco 一個Python代碼加速度器,可使Python代碼的執行速度提高到與編譯語言一樣的水平。 xmpppy Jabber服務器採用開發的XMPP協議,Google Talk也是採用XMPP協議的IM系統。在Python中有一個xmpppy模塊支持該協議。也就是說,我們可以通過該模塊與Jabber服務器通信,是不是很Cool。 PyMedia 用於多媒體操作的python模塊。它提供了豐富而簡單的接口用於多媒體處理(wav, mp3, ogg, avi, divx, dvd, cdda etc)。可在Windows和Linux平台下使用。 Pmw Python megawidgets,Python超級GUI組件集,一個在python中利用Tkinter模塊構建的高級GUI組件,每個Pmw都合併了一個或多個Tkinter組件,以實現更有用和更複雜的功能。 PyXML 用Python解析和處理XML文檔的工具包,包中的4DOM是完全相容於W3C DOM規範的。它包含以下內容: xmlproc: 一個符合規範的XML解析器。Expat: 一個快速的,非驗證的XML解析器。還有其他和他同級別的還有 PyHtml PySGML。 PyGame 用於多媒體開發和遊戲軟件開發的模塊。可以直接使用pip install pygame下載 PyOpenGL 模塊封裝了「OpenGL應用程序編程接口」,通過該模塊python程序員可在程序中集成2D和3D的圖形。 NumPy、NumArray、SAGE NumArray是Python的一個擴展庫,主要用於處理任意維數的固定類型數組,簡單說就是一個矩陣庫。它的底層代碼使用C來編寫,所以速度的優勢很明顯。SAGE是基於NumPy和其他幾個工具所整合成的數學軟件包,目標是取代Magma, Maple, Mathematica和Matlab 這類工具。 MySQLdb 用於連接MySQL數據庫。還有用於zope的ZMySQLDA模塊,通過它就可在zope中連接mysql數據庫。 Sqlite3 用於連接sqlite數據庫。 Python-ldap 提供一組面向對象的API,可方便地在python中訪問ldap目錄服務,它基於OpenLDAP2.x。 smtplib 發送電子郵件。 ftplib 定義了FTP類和一些方法,用以進行客戶端的ftp編程。如果想了解ftp協議的詳細內容,請參考RFC959。 PyOpenCL OpenCL的Python接口,通過該模塊可以使用GPU實現並行計算。 xes-lib 學而思庫可用於發送郵件、查看天氣等功能。

標準庫

Python擁有一個強大的標準庫。Python語言的核心只包含數字、字符串、列表、字典、文件等常見類型和函數,而由Python標準庫提供了系統管理、網絡通信、文本處理、數據庫接口、圖形系統、XML處理等額外的功能。Python標準庫命名接口清晰、文檔良好,很容易學習和使用。 Python社區提供了大量的第三方模塊,使用方式與標準庫類似。它們的功能無所不包,覆蓋科學計算、Web開發、數據庫接口、圖形系統多個領域,並且大多成熟而穩定。第三方模塊可以使用Python或者C語言編寫。SWIG,SIP常用於將C語言編寫的程序庫轉化為Python模塊。Boost C++ Libraries包含了一組庫,Boost.Python,使得以 Python 或 C++ 編寫的程序能互相調用。藉助於擁有基於標準庫的大量工具、能夠使用低級語言如C和可以作為其他庫接口的C++,Python已成為一種強大的應用於其他語言與工具之間的膠水語言。 Python標準庫的主要功能有: 文本處理,包含文本格式化、正則表達式匹配、文本差異計算與合併、Unicode支持,二進制數據處理等功能 文件處理,包含文件操作、創建臨時文件、文件壓縮與歸檔、操作配置文件等功能 操作系統功能,包含線程與進程支持、IO復用、日期與時間處理、調用系統函數、寫日記(logging)等功能 網絡通信,包含網絡套接字,SSL加密通信、異步網絡通信等功能 網絡協議,支持HTTP,FTP,SMTP,POP,IMAP,NNTP,XMLRPC等多種網絡協議,並提供了編寫網絡服務器的框架 W3C格式支持,包含HTML,SGML,XML的處理 其它功能,包括國際化支持、數學運算、HASH、Tkinter等 內置庫 可以直接使用 import語句導入。 外部庫 需要先下載,再在CMD命令窗口在pip.exe的同級目錄下輸入 pip install 庫名。 外部庫儲存在include文件夾中。

開發環境

工具 ●IDLE:Python內置IDE (隨python安裝包提供) ●PyChar:詳見百度百科PyCharm,由著名的JetBrains公司開發,帶有一整套可以幫助用戶在使用Python語言開發時提高其效率的工 具,比如調試、語法高亮、Project管理、代碼跳轉、智能提示、自動完成、單元測試、版本控制。此外,該IDE提供了一些高級功能,以用於支持Django框架下的專業Web開發。 ●Komodo和Komodo Edit:後者是前者的免費精簡版 ●Spyder:安裝Anaconda自帶的高級IDE ●PythonWin:ActivePython或pywin32均提供該IDE,僅適用於Windows ●SPE(Stani's Python Editor):功能較多的自由軟件,基於wxPython ●Ulipad:功能較全的自由軟件,基於wxPython;作者是中國Python高手limodou ●WingIDE:可能是功能最全的IDE,但不是自由軟件(教育用戶和開源用戶可以申請免費key) ●Eric:基於PyQt的自由軟件,功能強大。全名是:The Eric Python IDE ●DrPython ●PyScripter:使用Delphi開發的輕量級的開源Python IDE, 支持Python2.6和3.0。 ●PyPE:一個開源的跨平台的PythonIDE。 ●bpython: 類Unix操作系統下使用curses庫開發的輕量級的Python解釋器。語法提示功能。 ●eclipse + pydev插件:方便調試程序 ●emacs:自帶python支持,自動補全、refactor等功能需要插件支持 ●Vim: 最新7.3版編譯時可以加入python支持,提供python代碼自動提示支持 ●Visual Studio 2003 + VisualPython:僅適用Windows,已停止維護,功能較差 ●SlickEdit ●Visual Studio 2010 + Python Tools for Visual Studio ●TextMate ●Netbeans IDE ●Sublime ●ipython 另外,諸如Notepad++、EditPlus、UltraEdit等通用的程序員文本編輯器軟件也能對Python代碼編輯提供一定的支持,比如代碼自動着色、注釋快捷鍵等,但是否夠得上集成開發環境的水平,尚有待評估。

解釋器

Python是一門跨平台的腳本語言,Python規定了一個Python語法規則,實現了Python語法的解釋程序就成為了Python的解釋器。 CPython(ClassicPython,也就是原始的Python實現,需要區別於其他實現的時候才以CPython稱呼;或解作C語言實現的Python)。這是最常用的Python版本。 Jython(原名JPython;Java語言實現的Python,現已正式發布)。Jython可以直接調用Java的各種函數庫。 PyPy(使用Python語言寫的Python) IronPython(面向.NET和ECMA CLI的Python實現)。IronPython能夠直接調用.net平台的各種函數庫。可以將Python程序編譯成.net程序。 ZhPy(周蟒)(支持使用繁/簡中文語句編寫程序的Python語言)

著名應用

Digwebs-Web應用框架 Pylons-Web應用框架 Zope- 應用服務器 Plone- 內容管理系統 Django- 鼓勵快速開發的Web應用框架 Uliweb- 國人開發的輕量級Web框架 TurboGears- 另一個Web應用快速開發框架 Twisted--Python的網絡應用程序框架 Python Wikipedia Robot Framework- MediaWiki的機器人程序 MoinMoinWiki- Python寫成的Wiki程序 flask- Python 微Web框架 tornado- 非阻塞式服務器 Webpy- Python 微Web框架 Bottle- Python 微Web框架 EVE- 網絡遊戲EVE大量使用Python進行開發 Reddit - 社交分享網站 Dropbox - 文件分享服務 TurboGears - 另一個Web應用快速開發框架 Fabric - 用於管理成百上千台Linux主機的程序庫 Trac - 使用Python編寫的BUG管理系統 Mailman - 使用Python編寫的郵件列表軟件 Mezzanine - 基於Django編寫的內容管理系統 Blender - 以C與Python開發的開源3D繪圖軟件

學習網站

Python官方文檔英文版 Python官方文檔中文版 python 網絡教育-百度傳課 Python官網 [1]

下載安裝

在您開始之前,你的計算機需要Python,但您可能不需要下載它。首先檢查(在同級目錄下在命令行窗口輸入python)有沒有安裝Python。如果你看到了一個Python解釋器的響應,那麼就能在它的顯示窗口中得到一個版本號。通常的版本都可以做到Python的向前兼容。 如果您需要安裝, 您不妨下載最近穩定的版本。 就是那個以沒有被標記作為alpha或Beta發行的最高的版本。目前最穩定的版本是Python3.0以上。 如果你使用的操作系統是Windows:當前最穩定的Windows版本下載是"Python 3.9.0 for Windows" 如果你使用的是Mac,MacOS 10.2 (Jaguar), 10.3 (Panther) and 10.4 (Tiger)已經集成安裝了Python,但是你大概需要安裝最近通用的構架(build)。

參考資料

  1. Python,搜狗, 2017-02-13