從本文開始,我們就要正式了解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等。這些方便我們類型轉換或者運算的內置方法推薦大家有空掃一下。