Python(英國發音:/ˈpaɪθən/ 美國發音:/ˈpaɪθɑːn/),是一種面向對象、直譯式電腦編程語言,具備近二十年的發展歷史,成熟且穩定。它包含了一組完善並且容易理解的標準庫,可以輕鬆完成不少常見的任務。它的語法簡捷和清晰,儘可能使用無異義的英語單詞,與其它大多數程序設計語言使用大括號不同,它使用縮進來定義語句塊。php
與Scheme、Ruby、Perl、Tcl等動態語言同樣,Python具有垃圾回收功能,可以自動管理內存使用。它常常被看成腳本語言用於處理系統管理任務和網絡程序編寫,然而它也很是適合完成各類高級任務。Python虛擬機自己幾乎能夠在全部的做業系統中運行。使用一些諸如py2exe、PyPy、PyInstaller之類的工具能夠將Python源代碼轉換成能夠脫離Python解釋器運行的程序。html
Python的官方解釋器是CPython,該解釋器用C語言編寫,是一個由社羣驅動的自由軟件,目前由Python軟件基金會管理。python
Python支持命令式程序設計、面向對象程序設計、函數式編程、面向側面的程序設計、泛型編程多種編程範式。程序員
Python的創始人爲吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,吉多·範羅蘇姆爲了在阿姆斯特丹打發時間,決心開發一個新的腳本解釋程序,做爲ABC語言的一種繼承。之因此選中Python做爲程序的名字,是由於他是一個蒙提·派森(Monty Python)的飛行馬戲團的愛好者。ABC是由吉多參加設計的一種教學語言。就吉多本人看來,ABC這種語言很是優美和強大,是專門爲非專業程序員設計的。可是ABC語言並無成功,究其緣由,吉多認爲是非開放形成的。吉多決心在Python中避免這一錯誤,並取得了很是好的效果,完美結合了C和其餘一些語言。[5]web
就這樣,Python在吉多手中誕生了。實際上,第一個實現是在Mac機上。能夠說,Python是從ABC發展起來,主要受到了Modula-3(另外一種至關優美且強大的語言,爲小型團體所設計的)的影響。而且結合了Unix shell和C的習慣。正則表達式
目前吉多仍然是Python的主要開發者,決定整個Python語言的發展方向。Python社羣常常稱呼他是仁慈的獨裁者。算法
Python 2.0於2000年10月16日發佈,增長了實現完整的垃圾回收,而且支持Unicode。同時,整個開發過程更加透明,社羣對開發進度的影響逐漸擴大。Python 3.0於2008年12月3日發佈,此版不徹底兼容以前的Python源代碼。不過,不少新特性後來也被移植到舊的Python 2.6/2.7版本。shell
Python是徹底面向對象的語言。函數、模塊、數字、字符串都是對象。而且徹底支持繼承、重載、派生、多繼承,有益於加強源代碼的複用性。Python支持重載運算符,所以Python也支持泛型設計。相對於Lisp這種傳統的函數式編程語言,Python對函數式設計只提供了有限的支持。有兩個標準庫(functools, itertools)提供了Haskell和Standard ML中久經考驗的函數式程序設計工具。數據庫
雖然Python可能被粗略地分類爲「腳本語言」(script language),但實際上一些大規模軟件開發項目例如Zope、Mnet及BitTorrent,Google也普遍地使用它。Python的支持者較喜歡稱它爲一種高級動態編程語言,緣由是「腳本語言」泛指僅做簡單程序設計任務的語言,如shell script、VBScript等只能處理簡單任務的編程語言,並不能與Python相提並論。編程
Python自己被設計爲可擴充的。並不是全部的特性和功能都集成到語言核心。Python提供了豐富的API和工具,以便程序員可以輕鬆地使用C、C++、Cython來編寫擴充模塊。Python編譯器自己也能夠被集成到其它須要腳本語言的程序內。所以,不少人還把Python做爲一種「膠水語言」(glue language)使用。使用Python將其餘語言編寫的程序進行集成和封裝。在Google內部的不少項目,例如Google Engine使用C++編寫性能要求極高的部分,而後用Python或Java/Go調用相應的模塊。[6]《Python技術手冊》的做者馬特利(Alex Martelli)說:「這很難講,不過,2004年,Python已在Google內部使用,Google召募許多Python高手,但在這以前就已決定使用Python。他們的目的是儘可能使用Python,在不得已時改用C++;在操控硬件的場合使用C++,在快速開發時候使用Python。」[7]
Python的設計哲學是「優雅」、「明確」、「簡單」。所以其對手Perl語言中「老是有多種方法來作同一件事」的理念在Python開發者中一般是難以忍受的。Python開發者的哲學是「用一種方法,最好是隻有一種方法來作一件事」。在設計Python語言時,若是面臨多種選擇,Python開發者通常會拒絕花俏的語法,而選擇明確沒有或者不多有歧義的語法。因爲這種設計觀念的差別,Python源代碼一般被認爲比Perl具有更好的可讀性,而且可以支撐大規模的軟件開發。這些準則被稱爲「Python格言」。在Python解釋器內運行import this
能夠得到完整的列表。
>>> import this
The Zen of Python
by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
--From: Python.org
Python開發人員儘可能避開不成熟或者不重要的優化。一些針對非重要部位的加快運行速度的補丁一般不會被合併到Python內。再加上由於Python屬於動態類型語言,動態類型語言是在運行期間檢查數據的類型,不得不保持描述變量值的實際類型標記,程序在每次操做變量時,須要執行數據依賴分支,而靜態類型語言相對於動態類型語言,在聲明變量時已經指定了數據類型和表示方法,根據這一原理致使Python相對於C、Visual Basic等靜態類型語言來講運行速度較慢。不過,根據二八定律,大多數程序對速度要求不高。在某些對運行速度要求很高的狀況,Python設計師傾向於使用JIT技術,或者用使用C/C++語言改寫這部分程序。[來源請求]目前可用的JIT技術是PyPy。
Python常常被用於Web開發。好比,經過mod_wsgi模塊,Apache能夠運行用Python編寫的Web程序。使用Python語言編寫的Gunicorn做爲Web服務器,也可以運行Python語言編寫的Web程序。Python定義了WSGI標準應用接口來協調Http服務器與基於Python的Web程序之間的溝通。一些Web框架,如Django、Pyramid、TurboGears、web2py、Zope、Flask等,可讓程序員輕鬆地開發和管理複雜的Web程序。
Python對於各類網絡協議的支持很完善,所以常常被用於編寫服務器軟件、網絡蠕蟲。第三方庫Twisted支持異步在線編寫程序和多數標準的網絡協議(包含客戶端和服務器),而且提供了多種工具,被普遍用於編寫高性能的服務器軟件。另有gevent這個流行的第三方庫,一樣可以支持高性能高併發的網絡開發。
Python自己包含的Tkinter庫可以支持簡單的GUI開發。可是愈來愈多的Python程序員選擇wxPython或者PyQt來開發跨平臺的桌面軟件。使用它們開發的桌面軟件運行速度快,與用戶的桌面環境相契合。經過PyInstaller還能將程序發佈爲獨立的安裝程序包。與C++相比較,使用Python開發桌面軟件一般更快更容易。
在不少操做系統裏,Python是標準的系統組件。大多數Linux發佈版以及NetBSD、OpenBSD和Mac OS X都集成了Python,能夠在終端機下直接運行Python。有一些Linux發佈版的安裝器使用Python語言編寫,好比Ubuntu的Ubiquity安裝器、Red Hat Linux和Fedora的Anaconda安裝器。Gentoo Linux使用Python來編寫它的Portage包管理系統。Python標準庫包含了多個調用做業系統功能的庫。經過pywin32這個第三方軟件包,Python可以訪問Windows的COM服務及其它Windows API。使用IronPython,Python程序可以直接調用.Net Framework。通常說來,Python編寫的系統管理腳本在可讀性、性能、源代碼重用度、擴展性幾方面都優於普通的shell腳本。
NumPy、SciPy、Matplotlib可讓Python程序員編寫科學計算程序。有些公司會使用Scons代替make構建C++程序。
不少遊戲使用C++編寫圖形顯示等高性能模塊,而使用Python或者Lua編寫遊戲的邏輯、服務器。相較於Python,Lua的功能更簡單、體積更小;而Python則支持更多的特性和數據類型。不少遊戲,如EVE Online使用Python來處理遊戲中繁多的邏輯。
YouTube、Google、Yahoo!、NASA都在內部大量地使用Python。OLPC的做業系統Sugar項目的大多數軟件都是使用Python編寫。
一個在標準輸出設備上輸出Hello World的簡單程序,這種程序一般做爲開始學習編程語言時的第一個程序:
print("Hello, world!")
print "Hello, world!"
將這行程序碼保存爲myhello.py。而後在Linux終端機下輸入python myhello.py
,或者在Windows命令編輯字符下輸入myhello.py
運行。
Python也能夠單步直譯運行。運行Python解釋器進入交互式命令行的環境,你能夠在提示符號>>>旁輸入print("Hello, world!"),按Enter鍵輸出結果:
>>> print("Hello, world!") Hello, world!
>>> print "Hello, world!" Hello, world!
注意,低於3.0版本的Python,"Hello, world!"周圍不須要括號。Python 3.x與Python 2.x的print語法是不同的。
Python的設計目標之一是讓代碼具有高度的可閱讀性。它設計時儘可能使用其它語言常用的標點符號和英文單字,讓代碼看起來整潔美觀。它不像其餘的靜態語言如C、Pascal那樣須要書寫聲明語句,也不像它們的語法那樣常常有特殊狀況。
Python開發者有意讓違反了縮進規則的程序不能經過編譯,以此來強迫程序員養成良好的編程習慣。而且Python語言利用縮進表示語句塊的開始和退出(Off-side規則),而非使用花括號或者某種關鍵字。增長縮進表示語句塊的開始,而減小縮進則表示語句塊的退出。縮進成爲了語法的一部分。例如if
語句:
if age < 21: print("你不能買酒。") print("不過你能買口香糖。") print("這句話處於if語句塊的外面。")
根據PEP的規定,必須使用4個空格來表示每級縮進。使用Tab字符和其它數目的空格雖然均可以編譯經過,但不符合編碼規範。支持Tab字符和其它數目的空格僅僅是爲兼容很舊的Python程序和某些有問題的編輯程序。
if
語句,當條件成立時運行語句塊。常常與else
, elif
(至關於else if
)配合使用。for
語句,遍列列表、字符串、字典、集合等迭代器,依次處理迭代器中的每一個元素。while
語句,當條件爲真時,循環運行語句塊。try
語句。與except, finally, else
配合使用處理在程序運行中出現的異常狀況。class
語句。用於定義類型。def
語句。用於定義函數和類型的方法。pass
語句。表示此行爲空,不運行任何操做。assert
語句。用於程序調適階段時測試運行條件是否知足。with
語句。Python2.6之後定義的語法,在一個場景中運行語句塊。好比,運行語句塊前加鎖,而後在語句塊運行退出後釋放鎖。yield
語句。在迭代器函數內使用,用於返回一個元素。自從Python 2.5版本之後。這個語句變成一個運算符。raise
語句。拋出一個異常。import
語句。導入一個模塊或包。經常使用寫法:from module import name, import module as name, from module import name as anothername
Python的表達式寫法與C/C++相似。只是在某些寫法有所差異。
+, -, *, /, //, **, ~, %
分別表示加法或者取正、減法或者取負、乘法、除法、整除、乘方、取補、取模。>>, <<
表示右移和左移。&, |, ^
表示二進制的AND, OR, XOR
運算。>, <, ==, !=, <=, >=
用於比較兩個表達式的值,分別表示大於、小於、等於、不等於、小於等於、大於等於。在這些運算符裏面,~, |, ^, &, <<, >>
必須應用於整數。and
, or
, not
表示邏輯運算。is, is not
用於比較兩個變量是不是同一個對象。in, not in
用於判斷一個對象是否屬於另一個對象。dict comprehension, set comprehension, list comprehension
)。好比:>>> [x + 3 for x in range(4)] [3, 4, 5, 6] >>> {x + 3 for x in range(4)} {3, 4, 5, 6} >>> {x: x + 3 for x in range(4)} {0: 3, 1: 4, 2: 5, 3: 6}
>>> sum(x * x for x in range(10)) 285
lambda
表示匿名函數。匿名函數體只能是表達式。好比:>>> add = lambda x, y : x + y >>> add(3, 2) 5
y if cond else x
表示條件表達式。意思是當cond
爲真時,表達式的值爲y
,不然表達式的值爲x
。至關於C++和Java裏的cond?y:x
。[1,2,3]
,而tuple的寫法是(1,2,3)
。能夠改變list中的元素,而不能改變tuple。在某些狀況下,tuple的括號能夠省略。tuple對於賦值語句有特殊的處理。所以,能夠同時賦值給多個變量,好比:>>> x, y=1, 2 #同時給x,y賦值,最終結果:x=1, y=2
特別地,可使用如下這種形式來交換兩個變量的值:
>>> x, y = y, x #最終結果:y=1, x=2
\n
表示換行符。表達式前加r
指示Python不解釋字符串中出現的\。這種寫法一般用於編寫正則表達式或者Windows文件路徑。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的元素但不包含下標爲5的元素,且步長爲2Python的函數支持遞歸、默認參數值、可變參數、閉包,但不支持函數重載。爲了加強代碼的可讀性,能夠在函數後書寫「文檔字符串」(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 in range [a, b], including both end points.
函數調用時,實參能夠如同C語言那樣按照位置與形參匹配;也能夠按照keyword argument形式調用,即param_name=value形式的實參。在一個函數調用的實參表中,keyword argument必須出如今位置參數以後。
可變參數用*args或**dictargs表示,即在形式參數名字前加一個*號,表示這是由多個實參組成的可變參數,該形參視做tuple數據類型;在形式參數名字前加**號,表示這是由多個實參組成的可變參數,該形參視做dict數據類型。實際上,在一個collection類型(包括set、list、tuple甚至bytes、str等)的變量前加一個*號,得到了其中全部元素做爲多個對象。
Python的函數做爲first-class citizen,具備和普通變量平等的地位。函數一旦定義,便可視做爲普通對象,其形參會保留上次調用時的值,但在函數新的一次調用時會被實參值覆蓋。所以函數的缺省參數值在連續屢次調用該函數時,若是不被實參值覆蓋,就會一直保留。例如:
def f(a, L=[]): L.append(a) return L print(f(1)) print(f(2)) print(f(3))
結果爲:
[1] [1, 2] [1, 2, 3]
函數的缺省參數值在函數被定義時被一次性計算其初值。
Python的函數實參與形參之間的結合是傳遞對象的引用[8]。這是由於Python的賦值操做是把(變量)名字綁定到對象上。形實結合也是這種方式。若是形參綁定到一個mutable對象,則經過形參對此對象內容的修改,在函數外也是可見的。若是形參綁定到一個immutable對象,則經過形參是不能修改此對象內容,但能夠把形參從新綁定到其它對象上,這並不影響函數外的對象的值。例如:
def foo(a): a.append('haha') def bar(b): b=101 #其實是從新綁定了另外一個整形對象101 a=[] b=100 foo(a) bar(b) print(a) #結果爲['haha'] print(b) #結果爲100
面向對象開發方法是指綁定到對象的函數。調用對象方法的語法是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 #構造Fish的實例: f=Fish() #如下兩種調用形式是等價的: Fish.eat(f, "earthworm") f.eat("earthworm") u = User('username') u.name
Python認識一些以「__」開始並以「__」結束的特殊方法名,它們用於實現運算符重載和實現多種特殊功能。
Python採用動態類型系統。在編譯的時候,Python不會檢查對象是否擁有被調用的方法或者屬性,而是直至運行時,才作出檢查。因此操做對象時可能會拋出異常。不過,雖然Python採用動態類型系統,它同時也是強類型的。Python禁止沒有明肯定義的操做,好比數字加字符串。
與其它面嚮對象語言同樣,Python容許程序員定義類型。構造一個對象只須要像函數同樣調用類型便可,好比,對於前面定義的Fish
類型,使用Fish()
。類型自己也是特殊類型type
的對象(type
類型自己也是type
對象),這種特殊的設計容許對類型進行反射編程。
Python內置豐富的數據類型。與Java、C++相比,這些數據類型有效地減小代碼的長度。下面這個列表簡要地描述了Python內置數據類型(適用於Python 3.x):
類型 | 描述 | 例子 |
---|---|---|
str |
一個由字符組成的不可更改的有序列。在Python 3.x裏,字符串由Unicode字符組成。 | 'Wikipedia' "Wikipedia" """Spanning |
bytes |
一個由字節組成的不可更改的有序列。 | b'Some ASCII' b"Some ASCII" |
list |
能夠包含多種類型的可改變的有序列 | [4.0, 'string', True] |
tuple |
能夠包含多種類型的不可改變的有序列 | (4.0, 'string', True) |
set , frozenset |
與數學中集合的概念相似。無序的、每一個元素惟一。 | {4.0, 'string', True} frozenset([4.0, 'string', True]) |
dict或map |
一個可改變的由鍵值對組成的無序列。 | {'key1': 1.0, 3: False} |
int |
精度不限的整數 | 42 |
float |
浮點數。精度與系統相關。 | 3.1415927 |
complex |
複數 | 3+2.7j |
bool |
邏輯值。只有兩個值:真、假 | True False |
除了各類數據類型,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進行比較。
Python擁有一個強大的標準庫[9]。Python語言的核心只包含數字、字符串、列表、字典、文件等常見類型和函數,而由Python標準庫提供了系統管理、網絡通訊、文本處理、數據庫接口、圖形系統、XML處理等額外的功能。Python標準庫命名接口清晰、文檔良好,很容易學習和使用。
Python標準庫的主要功能有:
Python社區提供了大量的第三方模塊,使用方式與標準庫相似。它們的功能無所不包,覆蓋科學計算、Web開發、數據庫接口、圖形系統多個領域,而且大多成熟而穩定。第三方模塊可使用Python或者C語言編寫。SWIG,SIP經常使用於將C語言編寫的程序庫轉化爲Python模塊。Boost C++ Libraries包含了一組庫,Boost.Python,使得以Python或C++ 編寫的程序能互相調用。藉助於擁有基於標準庫的大量工具、可以使用低級語言如C和能夠做爲其餘庫接口的C++,Python已成爲一種強大的應用於其餘語言與工具之間的「膠水」語言。
WxPython
Python的3.0版本,常被稱爲Python 3000,或簡稱Py3k[10]。相對於Python的早期版本,這是一個較大的升級。爲了避免帶入過多的累贅,Python 3.0在設計的時候沒有考慮向下兼容。許多針對早期Python版本設計的程序都沒法在Python 3.0上正常運行。爲了照顧現有程序,Python 2.6做爲一個過渡版本,基本使用了Python 2.x的語法和庫,同時考慮了向Python 3.0的遷移,容許使用部分Python 3.0的語法與函數。基於早期Python版本而能正常運行於Python 2.6並沒有警告的程序能夠經過一個2 to 3的轉換工具無縫遷移到Python 3.0[11]。
新的Python程序建議使用Python 3.0版本的語法[12]。除非運行環境沒法安裝Python 3.0或者程序自己使用了不支持Python 3.0的第三方庫。目前不支持Python 3.0的第三方庫有Twisted, py2exe, PIL等。大多數第三方庫都正在努力地兼容Python 3.0版本。即便沒法當即使用Python 3.0,也建議編寫兼容Python 3.0版本的程序,而後使用Python 2.6, Python 2.7來運行。
Python 2.7被肯定爲最後一個Python 2.x版本,它除了支持Python 2.x語法外,還支持部分Python 3.1語法。
Python 3.0的變化主要在如下幾個方面[13]:
print
語句沒有了,取而代之的是print()
函數。可使用2to3
工具來自動轉換。Python 2.6與Python 2.7部分地支持這種形式的print
語法。在Python 2.6與Python 2.7裏面,如下三種形式是等價的:print "fish" print ("fish") #注意print後面有個空格 print("fish") #print()不能帶有任何其它參數
然而,Python 2.6實際已經支持新的print()
語法:
from __future__ import print_function print("fish", "panda", sep=', ')
str
類型表示一個Unicode字符串,至關於Python 2.x版本的unicode
類型。而字節序列則用相似b"abc"
的語法表示,用bytes
類表示,至關於Python 2.x的str
類型。如今兩種類型不能再隱式地自動轉換,所以在Python 3.x裏面"fish"+b"panda"
是錯誤。正確的寫法是"fish"+b"panda".decode("utf-8")
。Python 2.6能夠自動地將字節序列識別爲Unicode字符串,方法是:from __future__ import unicode_literals print(repr("fish"))
/
在Python 3.x內老是返回浮點數。而在Python 2.6內會判斷被除數與除數是不是整數。若是是整數會返回整數值,至關於整除;浮點數則返回浮點數值。爲了讓Python 2.6統一返回浮點數值,能夠:from __future__ import division print(3/2)
except exc, var
改成except exc as var
。使用語法except (exc1, exc2) as var
能夠同時捕獲多種類型的異常。Python 2.6已經支持這兩種語法。{1,2,3,4}
。注意{}
仍然表示空的字典(dict)。{expr1: expr2 for k, v in d}
,這個語法等價於:result={} for k, v in d.items(): result[expr1]=expr2 return result
{expr1 for x in stuff}
。這個語法等價於:result = set() for x in stuff: result.add(expr1) return result
0o777
,原來的形式0777
不能用了;二進制必須寫成0b111
。新增了一個bin()
函數用於將一個整數轉換成二進制字符串。Python 2.6已經支持這兩種語法。dict.keys(), dict.values(), dict.items(), map(), filter(), range(), zip()
再也不返回列表,而是迭代器。<, >, <=, >=
比較它們會拋出異常。好比1 < ""
在Python 2.6裏面會返回True
,而在Python 3.0裏面會拋出異常。如今cmp(), instance.__cmp__()
函數已經被刪除。def sendMail(from_: str, to: str, title: str, body: str) -> bool: pass
int
與long
類型。舊的名字 | 新的名字 |
---|---|
_winreg | winreg |
ConfigParser | configparser |
copy_reg | copyreg |
Queue | queue |
SocketServer | socketserver |
repr | reprlib |
StringIO
模塊如今被合併到新的io
模塊內。new, md5, gopherlib
等模塊被刪除。Python 2.6已經支持新的io
模塊。httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib
被合併到http
包內。exec
語句,只剩下exec()
函數。Python 2.6已經支持exec()
函數。Python是一門跨平臺的腳本語言,Python規定了一個Python語法規則,根據該規則可編寫Python解釋器。
不少並不是集成開發環境軟件的文本編輯器,也對Python有不一樣程度的支持,而且加上專門爲Python設計的編輯器插件也會有很高的可用性。
適用於Python的集成開發環境(IDE)軟件,除了標準二進制發佈包所附的IDLE以外,還有許多其餘選擇。其中有些軟件設計有語法着色、語法檢查、運行調試、自動補全、智能感知等便利功能。因爲Python的跨平臺出身,這些軟件每每也具有各類操做系統的版本或必定的移植性。