Python簡單介紹

Python (英國發音:/paθn/ 美國發音:/paθɑn/), 是一種面向對象的解釋型計算機程序設計語言,由荷蘭人Guido van Rossum於1989年發明,第一個公開發行版發行於1991年。程序員

Python是純粹的自由軟件, 源代碼和解釋器CPython遵循 GPL(GNU General Public License)協議 。正則表達式

Python語法簡潔清晰,特點之一是強制用空白符(white space)做爲語句縮進。shell

Python具備豐富和強大的庫。它常被暱稱爲膠水語言,可以把用其餘語言製做的各類模塊(尤爲是C/C++)很輕鬆地聯結在一塊兒。常見的一種應用情形是,使用Python快速生成程序的原型(有時甚至是程序的最終界面),而後對其中 有特別要求的部分,用更合適的語言改寫,好比3D遊戲中的圖形渲染模塊,性能要求特別高,就能夠用C/C++重寫,然後封裝爲Python能夠調用的擴展類庫。須要注意的是在您使用擴展類庫時可能須要考慮平臺問題,某些可能不提供跨平臺的實現。編程

風格編程語言

Python在設計上堅持了清晰劃一的風格,這使得Python成爲一門易讀、易維護,而且被大量用戶所歡迎的、用途普遍的語言。ide

設計者開發時總的指導思想是,對於一個特定的問題,只要有一種最好的方法來解決就行了。這在由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的做者有意的設計限制性很強的語法,使得很差的編程習慣(例如if語句的下一行不向右縮進)都不能經過編譯。其中很重要的一項就是Python的縮進規則。函數

一個和其餘大多數語言(如C)的區別就是,一個模塊的界限,徹底是由每行的首字符在這一行的位置來決定的(而C語言是用一對花括號{}來明確的定出模塊的邊界的,與字符的位置毫無關係)。這一點曾經引發過爭議。由於自從C這類的語言誕生後,語言的語法含義與字符的排列方式分離開來,曾經被認爲是一種程序語言的進步。不過不能否認的是,經過強制程序員們縮進(包括if,for和函數定義等全部須要使用模塊的地方),Python確實使得程序更加清晰和美觀。工具

設計定位性能

Python的設計哲學是「優雅」、「明確」、「簡單」。所以,Perl語言中「老是有多種方法來作同一件事」的理念在Python開發者中一般是難以忍受的。Python開發者的哲學是「用一種方法,最好是隻有一種方法來作一件事」。在設計Python語言時,若是面臨多種選擇,Python開發者通常會拒絕花俏的語法,而選擇明確的沒有或者不多有歧義的語法。因爲這種設計觀念的差別,Python源代碼一般被認爲比Perl具有更好的可讀性,而且可以支撐大規模的軟件開發。這些準則被稱爲Python格言。在Python解釋器內運行import this能夠得到完整的列表。

Python開發人員儘可能避開不成熟或者不重要的優化。一些針對非重要部位的加快運行速度的補丁一般不會被合併到Python內。因此不少人認爲Python很慢。不過,根據二八定律,大多數程序對速度要求不高。在某些對運行速度要求很高的狀況,Python設計師傾向於使用JIT技術,或者用使用C/C++語言改寫這部分程序。可用的JIT技術是PyPy。

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

雖然Python可能被粗略地分類爲「腳本語言」(script language),但實際上一些大規模軟件開發計劃例如Zope、Mnet及BitTorrent,Google也普遍地使用它。Python的支持者較喜歡稱它爲一種高級動態編程語言,緣由是「腳本語言」泛指僅做簡單程序設計任務的語言,如shellscript、VBScript等只能處理簡單任務的編程語言,並不能與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、Pascal那樣須要重複書寫聲明語句,也不像它們的語法那樣常常有特殊狀況和意外。

縮進

Python開發者有意讓違反了縮進規則的程序不能經過編譯,以此來強制程序員養成良好的編程習慣。而且Python語言利用縮進表示語句塊的開始和退出(Off-side規則),而非使用花括號或者某種關鍵字。增長縮進表示語句塊的開始,而減小縮進則表示語句塊的退出。縮進成爲了語法的一部分

根據PEP的規定,必須使用4個空格來表示每級縮進(不清楚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++相似。+, -, *, /, //, **, ~, %分別表示加法或者取正、減法或者取負、乘法、除法、整除、乘方、取補、取餘。>>, <<表示右移和左移。&, |, ^表示二進制的AND, OR, XOR運算。>, <, ==, !=, <=, >=用於比較兩個表達式的值,分別表示大於、小於、等於、不等於、小於等於、大於等於。在這些運算符裏面,~, |, ^, &, <<, >>必須應用於整數。

Python使用and, or, not表示邏輯運算。

is, is not用於比較兩個變量是不是同一個對象。in, not in用於判斷一個對象是否屬於另一個對象。

Python支持「列表推導式」(list comprehension),好比計算0-9的平方和:

sum(x * x for x in range(10))

Python使用lambda表示匿名函數。匿名函數體只能是表達式。好比:

add=lambda x, y : x + y

add(3,2)

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對於賦值語句有特殊的處理。所以,能夠同時賦值給多個變量,好比:

x, y=1,2#同時給x,y賦值,最終結果:x=1, y=2

特別地,可使用如下這種形式來交換兩個變量的值:

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的元素但不包含下標爲5的元素,且步長爲2。

相關文章
相關標籤/搜索