Python 是一種敏捷的、動態類型化的、極富表現力的開源編程語言,能夠被自由地安裝到多種平臺上(參閱 參考資料)。Python 代碼是被解釋的。若是您對編輯、構建和執行循環較爲熟悉,則 Python 代碼對您來講更簡單。可是,請不要搞錯:Python 器能夠是簡單的腳本,也能夠是大型的複雜程序。事實上,Python 解釋器的最大特色是鼓勵探索和簡化學習過程。若是您想證實這一點,請使用 Python 編寫著名的 Hello World! 程序:html
python
;在 Microsoft® Windows® 系統中,啓動 Python 命令 shell。>>>
) 標誌後輸入 print 'Hello World!
',而後按 Enter。rb% python Python 2.4 (#1, Mar 29 2005, 12:05:39) [GCC 3.3 20030304 (Apple Computer, Inc. build 1495)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> print 'Hello World!' Hello World!
您能夠看到,我使用的是運行於 Apple OS X 系統上的 Python V2.4。可是,無論操做系統是什麼,基本原理都是同樣的,並且在本例中,所用的是 Python 的哪個實際版本也無所謂。我雖然不瞭解您,可是此 Hello World! 練習比我學過的 C、C++ 甚至 Java™ 語言的對應練習容易多了。這種簡單性就是使用 Python 解釋器的主要優勢之一。開發人員能夠快速試驗一個想法、研究一種對象屬性或不一樣算法,而無需編譯、執行和測試任何代碼。python
從其餘語言過渡到 Python 編程語言時須要學習的最重要的課程之一是,Python 中的每樣東西都是對象。這一點可能並無什麼特別之處,尤爲是對於熟悉面向對象的語言(如 C++、Java 或 C#)的人來講。然而,Python 的面向對象原理與其餘語言不一樣,主要表如今兩個方面:第一,Python 中的全部數據值都被封裝在相關對象類中。第二,Python 程序中的全部東西都是能夠從程序訪問的對象,即便是您編寫的代碼也不例外。linux
大多數流行的編程語言都有多個內置的數據類型,在這一方面 Python 也同樣。例如,C 編程語言具備整型和浮點類型。因爲譜系相同,Java 語言和 C# 具備內置類型也不足爲奇。這意味着在 C 程序中,能夠編寫 int i = 100
來建立和初始化整型變量。在 Java 和 C# 中,此方法也是可能的,並且使用它們的自動裝箱功能,在須要時這兩種語言還能夠把這種簡單的內置類型轉換爲 Integer
對象。程序員
另外一方面,Python 不包含像 int 這樣的簡單類型 —— 只有對象類型。若是 Python 中須要整數值,將整數賦值給相應變量(如 i = 100
)便可。在後臺,Python 將建立一個整數對象,並將對新對象的引用賦值給變量。問題的關鍵是:Python 是一種動態類型化語言,因此無需聲明變量類型。事實上在單個程序中,變量的類型是能夠改變(屢次)的。web
一種直觀演示動態類型化工做方式的簡單方法是,設想單個名爲 PyObject
的基類,讓 Python 中的全部其餘對象類型都繼承它。在這一模型中,您建立的全部變量都將引用在總的類層次結構中建立的對象。若是您還讓 PyObject
類記錄曾建立並分配給變量的子類的實際類型或名稱,則 Python 程序可正確肯定程序執行過程當中須要採起的步驟。算法
上一段描述 Python 的面向對象的模型圖像是對 Python 的實際工做方式很好的模擬。除此以外,Python 還可使用類型函數來簡化對變量類型的肯定。(本例還介紹如何使用帶有 # 字符的內聯註釋。)sql
>>> i = 100 # Create an int object whose value is 100 >>> type(i) <type 'int'> >>> f = 100.0 >>> type(f) <type 'float'>
能夠將 PyObject
類之下的全部 Python 類劃分爲 Python 運行時解釋器可使用的四個主要類別:shell
int
和 float
。到本系列結束時,我會把全部不一樣類別都介紹給你們。可是在這第一篇文章中,我重點介紹簡單類型。數據庫
回頁首django
Python 有五個內置的簡單類型:bool
、int
、long
、float
和 complex
。這些類型是不可變的,就是說整數對象一旦建立,其值便不可更改。相反,系統將建立新的簡單類型對象並將其賦值給變量。經過 Python id
函數,能夠查看基本 PyObject
標識的變動方式:
id
函數>>> i = 100 >>> id(i) 8403284 >>> i = 101 >>> id(i) 8403296
此方法看似容易丟失對象,會致使內存泄漏。可是,Python 像 C# 和 Java 同樣,使用了垃圾回收功能,以釋放用於保存再也不引用的對象的內存,如上例中用於保存 100 的整數對象。
Python 中最簡單的內置類型是 bool
類型,該類型包括的對象僅可能爲 True
或 False
:
bool
類型>>> b = True >>> type(b) <type 'bool'> >>> id(b) 1041552
由於只有兩個可能值,因此布爾類型是唯一的。Python 解釋器提供這僅有的(也是必需的)兩個 bool
對象:True
和 False
。在任什麼時候候,在 Python 程序須要這些對象時,變量只能相應地引用其中一個值。清單 5 顯示 bb
變量如何具備同一個 id
,無論您直接賦予它 b
變量的值仍是直接賦予它 True
對象。
bb
變量的值>>> b = True >>> id(b) 1041552 >>> bb = b >>> id(bb) 1041552 >>> bb = True >>> id(bb) 1041552
布爾對象名稱的大小寫是相當重要的,由於 true(和 false)是未定義的:
>>> b = true Traceback (most recent call last): File "<stdin>", line 1, in ? NameError: name 'true' is not defined
在這一點上,bool
類型可能看起來不是頗有用。不過顧名思義,布爾表達式是依賴於名稱的,以下所示:
>>> b = 100 < 101 >>> print b True
不少程序利用布爾表達式,Python 提供一整套布爾比較和邏輯運算,詳細信息請分別參見表 1 和表 2。
運算符 | 描述 | 示例 |
---|---|---|
< | 小於 | i < 100 |
<= | 小於等於 | i <= 100 |
> | 大於 | i > 100 |
>= | 大於等於 | i >= 100 |
== | 相等 | i == 100 |
!= | 不相等(另外使用 <>) | i != 100 |
補充一點,表 1 中列出的運算符優先級都同樣,除非將表達式置於括號中,不然按從左到右的順序應用。
運算符 | 描述 | 示例 |
---|---|---|
not |
邏輯非 | not b |
and |
邏輯與 | (i <= 100) and (b == True) |
or |
邏輯或 | (i < 100) or (f > 100.1) |
邏輯運算符的優先級低於單獨的比較運算符,這一點意義重大,由於必須先計算比較運算符,而後才能計算邏輯運算符。邏輯運算符的實際優先級就是表 2 中羅列這些運算符的順序。
在 Python 中,關於 or
和 and
邏輯運算符有意思的是,它們都是快捷運算符。簡言之,若是給定表達式 x
or y
,則僅當 x
爲 False
時纔會計算y
。一樣地,若是給定表達式 x
and y
,則僅當 x
爲 True
時,纔會計算 y
。此功能能夠加強表達式求值的性能(尤爲是針對長的或複雜的表達式),然而對於習慣於從其餘語言學來的不一樣規則的程序員而言,則容易犯錯。
Python 中其餘四個簡單的內置類型都是數值類型:int
、long
、float
和 complex
。在程序中,數值類型很常見,無論使用的是什麼語言。Python 對算術運算提供完整支持,包括加法、減法、乘法和除法(參見表 3)。
運算符 | 描述 | 示例 |
---|---|---|
* | 乘 | i * 100 |
/ | 除 | i / 100 |
// | 整除 | i // 100 |
% | 取餘 | f % 100 |
+ | 加 | i + 100 |
- | 減 | i - 100 |
乘法和除法運算符(表 3 中列出的前四個)具備高於加法和減法的優先級。如前所述,您能夠經過使用括號分組子表達式,將其分離出來以提升優先級。
Python 與 Java 語言不一樣,Java 語言一般定義容許的數值類型的範圍,而 Python 在這一點上更像 C,由於它的類型範圍是依賴於平臺的。您可使用 int
和 long
兩種類型來保存整數值,它們的不一樣點在於 int 是一種 32 位的整數值。於是,它被限制爲只能保存從 -232 到 232 - 1 之間的值(在多數平臺上)。與此相反,長整數類型的精度不受限,僅計算機內存對它有影響。要通知 Python 應該按照長類型處理整數,只需將 L 附加到數字的末尾,如 100L。在 Python 中,浮點值始終是按雙精度處理的;所以 Python 的 float
類型對應於 C 類語言中的雙精度。
與數值類型相關的其餘兩個重點是常量(如上例中的 100,只是明確表達的數字)和位運算。程序員通常在十進制系統(以 10 爲基數)中工做。可是,有時其餘系統也至關有用,尤爲是咱們知道計算機是基於二進制的。Python 能夠提供對八進制(以 8 爲基數)和十六進制(以 16 爲基數)數字的支持。要通知 Python 應該按八進制數字常量處理數字,只需將零附加在前面。將一個零加上一個 x 附加在數字的前面是告訴 Python 按十六進制數值常量處理數字,如如下代碼所示:
>>> print 127 # Using decimal literal 127 >>> print 0177 # Using octal literal 127 >>> print 0x7F # Using hexadecimal literal 127
當您具備容易的方式來表達數值常量時,尤爲是十六進制,就能夠容易地構建對應於特定測試用例的標誌,這是一種常見的編程技術。例如,一個 32 位的整數能夠存儲 32 個標誌值。使用位測試,能夠容易地測試標誌變量上的特定標誌。Python 中位運算的完整列表如表 4 所示。
運算符 | 描述 | 示例 |
---|---|---|
~ | 按位求補 | ~b |
<< | 向左位移 | b << 1 |
>> | 向右位移 | b >> 1 |
& | 按位和 | b & 0x01 |
^ | 按位異或 | b ^ 0x01 |
| | 按位或 | b | 0x01 |
至此,您可能想知道不一樣數值類型在單個表達式中混合出現的時候怎麼辦。簡單的答覆是,Python 會根據須要將表達式中的全部操做數轉換爲最複雜的操做數的類型。複雜度的順序是:int
、long
、float
和 complex
(非雙關),下面是一個簡單的示例:
>>> 1 / 3 0 >>> 1.0 / 3 0.33333333333333331 >>> 1.0 // 3 0.0 >>> 1 % 3 1 >>> 1.0 % 3 1.0
儘管 Python 會與您預期的同樣轉換操做數,可是語言並不基於運算符轉換操做數,如 1/3 示例中所示,其計算結果爲整數。若是要強制取得浮點結果,則必須確保操做數中至少有一個爲浮點類型。
最後一種類型 complex
多是大多數程序員難以識別的,由於它不是其餘編程語言中常見的內置數據類型。而對於工程師和科學家來講,複數倒是個司空見慣的概念。從形式上講,複數 具備實部和虛部兩個部分,都由 Python 中的 float
類型來表示。虛數 是 -1 的平方根的倍數,用 i或 j 表示 —— 取決於您被培養爲科學家仍是工程師。在 Python 中,複數的虛部被表示爲 j:
>>> c = 3.0 + 1.2j >>> print c (3+1.2j) >>> print c.real, c.imag 3.0 1.2
本例是一個實部爲 3.0 和虛部爲 1.2 的複數。注意,經過使用複雜對象的 real
和 imag
屬性,便可訪問複數的不一樣部分。
到此爲止,我已經介紹了 Python 只處理對象類型,然而示例中好像並無什麼對象。最後還有一個問題,構造函數在哪裏?對於簡單的內置數據類型,Python 替您作了大量的工做。不過,構造函數還在那裏(其名稱與相關數據類型的名稱相同),若是您願意,能夠直接使用它們,以下所示:
>>> b = bool(True) >>> i = int(100) >>> l = long(100) >>> f = float(100.1) >>> c = complex(3.0, 1.2) >>> print b, i, l, f, c True 100 100 100.1 (3+1.2j)
Python 是一種無比簡單又功能強大的語言。入門極其容易,尤爲是對於已經具備 C 類語言的經驗的程序員來講。本文簡單介紹了 Python 編程語言和內置數據類型:bool
、int
、long
、float
和 complex
。若是您還沒有理解,則請啓動一個 Python 解釋器,並嘗試按照我上面討論的方法操做。您將會很高興,我作到的您也能夠作到。
Python 是由 Guido van Rossum 開發的,可免費得到的。是一種很是高級的解釋型語言。其語法簡單易懂,並且面向對象的語義功能強大又靈活,Python 能夠普遍使用並具備高度的可移植性。本專題內容包括可愛的 Python 系列、Python 探索系列、Python 擴展、使用 Python 進行各類應用開發等等。