歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Python數據類型之“數字(numerics)”

下一節內容說的是“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

Copyright © Linux教程網 All Rights Reserved