下一節內容說的是“Python基本語法”,本節主要講下Python中的數據類型。
存儲在內存中的數據通常有兩個屬性:
Python中有很多內置類型(built-in types),內置類型可以理解為構建在Python Interpreter(Python解釋器)裡面的類型。Python中主要的內置類型有以下幾種:
我們主要說下numberics、sequences、sets 和 mappings這四種內置數據類型。為了避免篇幅過長,我們將對它們分別進行說明。
Python3 中的數字支持int(整型)、float(浮點型)、complex(復數)。Python文檔中bool(布爾值)不屬於數字類型,但是這裡也把bool類型放在這裡來說,因為bool是int的子類。就像大多是語言一樣,Python中的數據類型也是很直觀的。我們通過Python內置的type()函數可以查看變量所致的對象類型:
a = 10 # 整型
b = 1.5 # 浮點型
c = True # 布爾型
d = 5+2j # 復數
# 也可以同時給多個變量賦值
# a, b, c, d = 10, 1.5, True, 5+2j
print(type(a), type(b), type(c), type(d))
輸出結果:
<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>
說明
Python2 中的數字類型還包括一個long(長整型),且會自動將超過整型長度的數字轉換為長整型(數字最後加上L字母表示長整形)。但是Python3中已經沒有long類型了,int和long都叫整型(int)。
bool(布爾型)之所以屬於數字類型,是因為bool是int的子類。
顧名思義,強制類型轉換就是把一個數據類型強制轉換為另一數據類型。這裡,我們先說下數字類型(int、float、bool、complex)間的相互轉換。
在Python解釋器的交互式終端通過help(bool)可以查看bool類的完整定義,會發現bool是int類型的子類。另外bool類型只有兩個值:True和False,因此bool與int類型的值必然存在某種關聯。
>>> int(True)
1
>>> int(False)
0
>>> bool(1)
True
>>> bool(-1)
True
>>> bool(0)
False
結論:
bool類型可以看作一個特殊的int類型
>>> float(5)
5.0
>>> float(True)
1.0
>>> float(False)
0.0
>>> int(5.0)
5
>>> bool(5.0)
True
>>> bool(0.0)
False
>>> complex(5)
(5+0j)
>>> complex(5.0)
(5+0j)
>>> complex(True)
(1+0j)
>>> complex(False)
0j
>>> bool((5+0j))
True
>>> bool((0+0j))
False
>>> int((5+0j))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't convert complex to int
>>> float((5+0j))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't convert complex to float
結論:complex類型 不能強制轉換為 int 和 float類型
自動類型轉換是指兩個不同類型的操作數參與運算時,Python會先按照以下規則先對其中一個操作數進行自動類型轉換,然後再進行運算。
>>> 2 + (5+2j) # 整型轉復數
(7+2j)
>>> 2.0 + (5+2j) # 浮點型轉復數
(7+2j)
>>> True + (5+2j) # 布爾型轉復數
(6+2j)
>>> 2 + 5.0 # 整型轉浮點型
7.0
>>> True + 5.0 # 布爾型轉浮點型
6.0
>>> True + 2 # 布爾型轉整型
3