上一節內容說的是“Python基本語法”,本節主要講下Python中的數據類型。
存儲在內存中的數據通常有兩個屬性:
- 在內存中的存放位置:這個存放位置通過變量名可以找到;
- 在內存中的存放方式:這個由數據類型決定,如占幾個字節的空間、占用空間是否需要連續等。
Python中有很多內置類型(built-in types),內置類型可以理解為構建在Python Interpreter(Python解釋器)里面的類型。Python中主要的內置類型有以下幾種:
- numerics(數字):int、float、complex、bool
- sequences(序列/有序集合): str、list、tuple、range
- sets(無序集合):set
- mappings(映射):dict
- classes(類)
- instance(實例)
- exceptions(異常)
我們主要說下numberics、sequences、sets 和 mappings這四種內置數據類型。為了避免篇幅過長,我們將對它們分別進行說明。
數字類型(numerics)
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的子類。
1. 強制類型轉換
顧名思義,強制類型轉換就是把一個數據類型強制轉換為另一數據類型。這里,我們先說下數字類型(int、float、bool、complex)間的相互轉換。
int與bool類型
在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時, Ture->1, False->0
- int 轉 bool時, 非0->True, 0->False
int、bool與float類型
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
int、bool、float與complex
>>> 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類型
2. 自動類型轉換
自動類型轉換是指兩個不同類型的操作數參與運算時,Python會先按照以下規則先對其中一個操作數進行自動類型轉換,然后再進行運算。
- 如果有一個操作數是復數,另一個操作數會被轉換為復數
- 否則,如果有一個操作數是浮點型,另一個操作數會被轉換為浮點型
- (Python 2)否則,如果有一個操作數是長整形,另一個操作數會被轉換為長整型
- 否則,如果有一個是整型,另一個是布爾型,則布爾型會被轉換為整型0或1
- 否則,兩個都是相同數據類型,無需類型轉換
>>> 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
文章列表