Python~~簡介介紹,python簡介介紹
Python (英國發音:/paθn/ 美國發音:/paθɑn/), 是一種物件導向的解釋型電腦程式設計語言,由荷蘭人Guido van Rossum於1989年發明,第一個公開發行版發行於1991年。
Python是純粹的自由軟體, 原始碼和解譯器CPython遵循 GPL(GNU General Public License)協議 。
Python文法簡潔清晰,特色之一是強制用空白符(white space)作為語句縮排。
Python具有豐富和強大的庫。它常被暱稱為膠水語言,能夠把用其他語言製作的各種模組(尤其是C/C++)很輕鬆地連接在一起。常見的一種應用情形是,使用Python快速產生程式的原型(有時甚至是程式的最終介面),然後對其中 有特別要求的部分,用更合適的語言改寫,比如3D遊戲中的圖形渲染模組,效能要求特別高,就可以用C/C++重寫,而後封裝為Python可以調用的擴充類庫。需要注意的是在您使用擴充類庫時可能需要考慮平台問題,某些可能不提供跨平台的實現。
風格
Python在設計上堅持了清晰劃一的風格,這使得Python成為一門易讀、易維護,並且被大量使用者所歡迎的、用途廣泛的語言。
設計者開發時總的指導思想是,對於一個特定的問題,只要有一種最好的方法來解決就好了。這在由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規則),而非使用花括弧或者某種關鍵字。增加縮排表示語句塊的開始,而減少縮排則表示語句塊的退出。縮排成為了文法的一部分。例如if語句:
| 1234 |
if age<21: print("你不能買酒。") print("不過你能買口香糖。")print("這句話處於if語句塊的外面。") |
注:上述例子為python 3.0版本的代碼
根據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))
285
Python使用lambda表示匿名函數。匿名函數體只能是運算式。比如:
>>> add=lambda x, y : x + y
>>> add(3,2)
5
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不解釋字串中出現的\。這種寫法通常用於編寫Regex或者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。
願意瞭解更多的可關註:mingli.com
朋友需要請加球球:二零四二八四九二三七
有詳細關於更多的Python技術知識的講解。謝謝!