從本文開始,我們就要正式瞭解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+imagj,其中 real 是實數部分,imag是虛數部分。然而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等。這些方便我們型別轉換或者運算的內建方法推薦大家有空掃一下。