您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關Python的數據類型有哪些,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
python2中整形可以分為一般整形和長整形,但是在python3中,兩者以及合二為一了,只有整形。python中的整形是具有無限精度的(只有內存能放下),可以表示任意位數的數字。例如:
>>> 1111_2222_3333_4444_5555_6666_7777_8888_9999_0000 1111222233334444555566667777888899990000
python人性化的地方在于,上面的代碼中,我每四位做了一個分割,讓數字看起來很清晰。外國人可能更喜歡每3位做一個分割。
>>> 123_456_789 123456789 >>>
浮點數在CPython中的標準實現是采用C語言中的雙精度類型(double)來實現,因此一個浮點數占8字節,這點對于python而言可能不重要。重要的是它是按照IEEE754標準實現的。例如:
>>> 1.234 1.234 >>> 1.23412313131231233 1.2341231313123124 >>> 1.231123E100 1.231123e+100
浮點數支持科學計數法寫法。
python內部集成了復數類型,這對于坐標或者復變函數與積分變換計算而言可能提供了大大的方便,但是通常處理數值計算的時候,我們還是采用numpy庫。復數可以直接用1+1j類似的方式來直接初始化,也可以使用內建函數complex(real,imag)來創建一個復數。例如:
>>> a = 1+2j >>> a (1+2j) >>> type(a) <class 'complex'> >>> b = complex(2,2) >>> b (2+2j) >>>
當然了,python也提供了復數相關計算的實現,例如:
>>> b + a (3+4j) >>> a - b (-1+0j) >>> a * b (-2+6j) >>> a / b (0.75+0.25j) >>>
每一門語言都有自己所支持的運算符,運算符之間是有優先級的,操作數和運算符之間是由結合性的。一般而言,我們沒有必要清楚的記住每一個運算符直接的關系。這就要求在編寫程序的時候,多使用()來表達表達式的精確意義。例如:
>>> x = 1 >>> y = 2 >>> not x and y or y > x != 1 False
這樣的表達式就已經過于復雜了,不太好理解其中的邏輯。當然了,你的真實意圖可能如下:
>>> ((not x) and y) or (y > (x != 1)) True
這時候,結果就和上面的不一樣了,所以如果沒有必要,不要寫復雜表達式,如果寫了,那么請給復雜表達式加上()來精確的表達你的意思。
混合類型之間的計算結果總是向復雜的類型轉換。例如:
>>> num = 1 + 2.3 >>> type(num) <class 'float'> >>> num = 1 + (2 + 3j) >>> type(num) <class 'complex'>
在python3中除法可以分為正常除法和取整除法兩種。由于python2已經停止了支持,本專欄的所有內容將只針對python3。
/:現在python3中的/總是執行真除法,無論操作數的類型是什么。執行結果總是包含小數部分。
//:執行向下取整除法,如果操作數都是整數,那么結果將會是整數;如果其中任意一個操作數是浮點數,那么執行結果將會是浮點數。
仔細看下面的例子:
>>> 3 / 2 1.5 >>> 3.0 / 2 1.5 >>> 3 // 2 1 >>> 3.0 // 2 1.0
盡管,我們可能很少書寫包含最后一種情形的表達式,但是我們需要注意它的結果,它仍舊是先執行向下取整除法,然后加上小數部分。再來看下面的例子,來證實這確實是向下取整除法。
>>> -2.9 // 1 -3.0 >>> -2.1 // 1 -3.0
python中默認字面值是10進制,也可以使用下面的方式來產生其它進制的字面值
>>> 0o12 # 8進制 10 >>> 0xA # 16進制 10 >>> 0b10 # 2進制 2
它們都是以0開頭,8進制跟字母o(大小寫都可以),16進制跟字母x,2進制跟字母b;之后跟上數值部分即可。當然了,python也提供了相應的函數來完成進制直接的相互轉換。
>>> a = 3 >>> oct(a) # 轉成8進制字符串 '0o3' >>> hex(a) # 轉成16進制字符串 '0x3' >>> bin(a) # 轉成2進制字符串 '0b11' >>> int('0b10',2) # 將2進制轉為10進制 2 >>> int('0xa',16) # 將16進制 轉為10進制 10 >>> int('0o12',8) # 將8進制 轉為10進制 10
int()函數(其實不是函數)用于將一個字符串或數字轉換為整型。該函數的用法如下:
int(x, base=10)
x是數值字符串,base是該數值字符串的進制,base擁有一個默認值10.
python中還有另外一個函數eval(),該函數將其中的字符串當做python代碼來執行,因此,它的效果如下:
>>> eval('0o12') 10 >>> eval('0xa') 10 >>> eval('0b10') 2
該函數運行的比較慢,因為他會將字符串作為程序的一個片段編譯運行,所以該函數使用的時候實際上存在著比較大的安全風險。
python也支持C語言的位操作,但是在大多數時候,我們是用不到的。下表是位操作運算符。
位運算符 | 功能 |
<< | 按位左移 |
>> | 按位右移 |
| | 按位或 |
& | 按位與 |
^ | 按位異或 |
~ | 按位取反 |
其中值得一提的是,按位左移多少位就相當于給原數字乘上2的N次方,同理按位右移多少位就相當于給原數字除以2的N次方。在python中幾乎是不會用到位運算的。
python中的集合也是數值類型,集合提供了樸素集合論中集合的基本功能。滿足確定性,互異性,無序性。需要特別注意的是,集合只包含不可變對象(可哈希的)類型,列表和字典是不能嵌入其中的,元組是可以的。但是集合本身是可變對象。關于集合的運算可以閱讀集合論相關知識。
下面的例子展示集合中的元素只能是不可變對象,但是集合本身是可變對象。
>>> a.add(1) >>> a {1} >>> a.add("123") >>> a {'123', 1} >>> b = 1,2 >>> a.add(b) >>> a {'123', 1, (1, 2)}
集合中添加數字,字符串,元組等不可變對象是沒有問題的。下面看一下添加可變對象會發生什么。
>>> c = [1,2,3] >>> a.add(c) Traceback (most recent call last) : File "<stdin>", line 1, in <module> TypeError: unhashable type: 'list' >>> d = {'1':1,'2':2} >>> a.add(d) Traceback (most recent call last) : File "<stdin>", line 1, in <module> TypeError: unhashable type: 'dict' >>> e = set() >>> a.add(e) Traceback (most recent call last) : File "<stdin>", line 1, in <module> TypeError: unhashable type: 'set'
可以看到,無論是list,dict,set哪一個,都會提示類型錯誤,不可哈希類型。
python提供了顯示的布爾類型,True和False是預置的兩個布爾值。實際上,True和False是bool的兩個實例,而bool只是內置類型int的子類。True和False的行為和1,0一致。bool為True和False重新定義了str和repr的字符串格式,所有打印出來就會顯示True和False,而不是1,0.
有意思的是python制定了1,0兩種情況下的顯示,沒有定義其余值的顯示。所以顯示的時候會發生下面的情況。
>>> True + 1 2
小數和分數類型都需要導入模塊來創建,在這里不做過多的介紹。它們相比于浮點數而言,是精確的。尤其是當你需要高精度計算的時候,這就十分有必要了,通常大多數場合下,我們都不怎么需要它們。
>>> from decimal import Decimal >>> a = Decimal('0.1') >>> a Decimal('0.1') >>> from fractions import Fraction >>> b = Fraction(1,3) # 1是分子,3是分母 >>> b Fraction(1, 3)
看完上述內容,你們對Python的數據類型有哪些有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。