寫給.NET開發者的Python教程(二):基本類型和變數
從本文開始,我們就要正式了解Python的語法特性了,這章主要介紹基本類型和變數,開始之前先介紹下Python中的標準輸入輸出。
標準輸入輸出
前文舉過TwoSum問題的例子,但是沒有講到標準輸入輸出的處理,因為那部分leetcode平台幫我們處理了。但實際上標準輸入輸出是非常重要的,是我們編寫任何程式碼都必須先了解的語法,這裡以C#做對比,介紹Python的標註輸入方法input和標準輸出方法print。
input方法在Python中的作用和Console.ReadLine一致,可以從電腦獲得用戶的輸入數據,稱之為標準輸入。在Python 2中標註輸入分為input和raw_input兩個方法,其中input只能接受字元文本輸入,輸入數字會報錯。這一點在Python 3中得到了改進,統一合併為input方法。因此從功能上,input和C#的標準輸入功能一致,都允許用戶輸入任何內容,並以字元串的形式讀取。
print方法作為Python的標準輸出方法,可以將任何對象輸出為字元串。但這裡值得注意的是,Python並不支援字元串和不同值類型的直接相加,這會導致異常拋出。而C#支援此特性,如下:
因此在Python中需要將其他類型先轉換為字元串才可以直接字元串變數相加,如下:
基本類型
基本類型是數據操作的起步,前面的內容已經出現過字元串和數值之類的操作。Python的基本類型主要分為整形(int),浮點數(float),複數(complex),字元串(string)和布爾值(bool).
-
整形(int)
Python的整形幾乎沒有長度限制,可以輸入任意大小的數值。這取決於系統記憶體的限制,基本想要多大值就可以多大。這點和C#極為不一樣,C#中即使是long,它的取值範圍也都是有限的,最大也就是2^63 – 1。
此外,對於其他進位的數值表現形式Python也是不一樣的,主要區別在於不同進位數值的前綴,如下:
-
浮點數(float)
Python中浮點數沒有float和double之分,全部都是雙精度浮點數,統一使用float表示。同時也支援使用科學計數法表示,如下:
雖然Python對float的取值範圍沒有明確限制,但是大多數平台上會被實現為雙精度64位浮點數,大部分情況下最大值大約為1.8 ⨉ 10^308,超過這個值就會被顯示為inf.
-
複數(complex)
複數是由一個實數和一個虛數組合構成,表示為:real+imagej,其中 real 是實數部分,image是虛數部分。然而C#中沒有複數的概念,只能自己封裝構造。
老實講,複數這塊目前我還沒實際使用到,對於其作用並沒有太多的認知。
-
字元串(string)
字元串在Python中被表示為str,可以用單引號或者雙引號包括一段內容來表示。大部分情況下單引號和雙引號是沒有去別的,但是當他們混用時,包括在字元串內的單引號或者雙引號只會被當成普通符號。
轉義符同樣是受支援的,包括\”,\n和\t之類的常用轉義,甚至還包括\u表示任意Unicode字元。
關於字元串的格式化,Python中的str.format(‘{0}’,arg)和從 3.7開始支援的‘{0}’.format(arg)語法和C#中的string.Format(“{0}”,arg)的寫法非常像。
-
布爾值(bool)
布爾值對於Python而言,和C#基本一致,只是Python中首字母大寫而已,分別是True和False。對應的整形數字也都為1和0。
此外還要提一下空值,在Python中表示為None,而在C#中為null。使用起來沒有太大區別
關於類型轉換,在Python中整形、浮點數、複數、字元串和布爾值分別對應的方法為int(),float(),complex(),str(),和bool(),他們默認都支援了從其他類型強制轉換的操作,如下:
但是對於C#而言,默認進行強制轉換時,是不可以直接從字元串轉換為對應值的,必須使用例如int.Parse()等方法顯式轉換才行。
變數
變數可以是任意的數據類型,在程式碼中使用一個變數名表示。變數名必須是大小寫英文、數字和下劃線(_)的組合,且不能由數字開頭。雖然中文漢字也支援,但是一般不用中文作為變數名。這一點對Python和C#都適用,最大的不同在Python聲明變數不需要指定變數類型,直接賦值就可以了。
Python解釋器在賦值的時候,會幹兩件事情(以a=’ABC『舉例):
- 在記憶體里創建變數內容,這裡是字元串’ABC』
- 在創建一個名為a的變數,並將它指向『ABC’的地址
這點和C#中的引用類型分配記憶體是類似的,變數會指向引用內容。
總結
關於Python的基礎類型就介紹到這裡,實際上使用基礎類型時還會牽扯到一些內置的函數,比如abs,max,min,hex,oct,chr等。這些方便我們類型轉換或者運算的內置方法推薦大家有空掃一下。