- 細說Python編程:從入門到科學計算
- 凌峰 韓曉泉編著
- 4299字
- 2024-12-27 21:39:28
2.6 數據類型
數據類型主要有整數型、浮點型、復數型、字節型、布爾型、字符串型6種,開發人員應該牢固掌握這些數據類型,只有這樣才能減少在編寫程序時犯的錯誤。
2.6.1 整數型

整數型(int)數據就是沒有小數部分的數字,Python中的整數包括正整數、0和負整數,不同于強類型的編程語言,它的整數不分類型,或者說它只有一種類型的整數。Python整數的取值范圍是無限的,無論多大或者多小的數字,Python都能輕松處理。當所用數值超過計算機自身的計算能力時,Python會自動轉用高精度計算(大數計算)。
提示
強類型的編程語言會提供多種整數類型,每種類型的長度都不同,能容納的整數的大小也不同,開發者要根據實際數字的大小選用不同的類型。例如C語言提供了short、int、long、long long 4種類型的整數,它們的長度依次遞增,初學者在選擇整數類型時往往比較迷惑。
【例2-18】 整數類型應用示例。
輸入如下代碼:
# 將21賦值給w w = 21 print(w) print(type(w)) # 給y賦一個很大的值 y = 9999999999999999 print(y) print(type(y)) # 給z賦一個很小的值 z = -76543399988777779 print(z) print(type(z))
運行結果如下:
21 <class 'int'> 9999999999999999 <class 'int'> -76543399988777779 <class 'int'>
y是一個極大的數字,z是一個很小的數字,Python都能正確輸出,不會發生溢出,這說明Python對整數的處理能力非常強大。無論對于多大或者多小的整數,Python只用一種類型存儲,就是int。
在Python中,可以使用多種進制來表示整數。
(1)十進制。平時常見的整數就是十進制形式,它由0~9共10個數字排列組合而成。使用十進制形式的整數不能以0作為開頭,除非這個數值本身就是0。
(2)二進制。由0和1兩個數字組成,書寫時以0b或0B開頭。例如,101對應的十進制數是5。
(3)八進制。八進制整數由0~7共8個數字組成,以0o或0O開頭。注意,第一個是數字0,第二個是大寫或小寫的字母O。
(4)十六進制。由0~9共10個數字以及A~F(或a~f)6個字母組成,書寫時以0x或0X開頭。
【例2-19】 不同進制數據Python代碼應用示例。
嘗試輸入如下代碼:
#二進制 bin1 = 0b101 print('bin1Value: ', bin1) bin2 = 0B110 print('bin2Value: ', bin2) #八進制 oct1 = 0o26 print('oct1Value: ', oct1) oct2 = 0O41 print('oct2Value: ', oct2) #十六進制 hex1 = 0x45 hex2 = 0x4Af print("hex1Value: ", hex1) print("hex2Value: ", hex2)
運行結果如下:
bin1Value: 5 bin2Value: 6 oct1Value: 22 oct2Value: 33 hex1Value: 69 hex2Value: 1199
為了提高數字的可讀性,Python 3.x允許使用下畫線“_”作為數字(包括整數和小數)的分隔符。通常每隔3個數字添加一個下畫線,類似于英文數字中的逗號。下畫線不會影響數字本身的值。
【例2-20】 數字分隔符應用示例。
輸入如下代碼:
pi = 3.141_159_265_3 c = 299_792_458 print('圓周率 = {}'.format(pi)) print('光速 = {} m/s'.format(c))
運行結果如下:
圓周率 = 3.1411592653 光速 = 299792458 m/s
2.6.2 浮點型

在編程語言中,小數通常以浮點數(float)的形式存儲。浮點數和定點數是相對的:小數在存儲過程中,如果小數點發生移動,就稱為浮點數;如果小數點不動,就稱為定點數。
Python中的小數有兩種書寫形式:aEn或aen。中間的字母e大小寫都可以,a為尾數部分,是一個十進制數;n為指數部分,是一個十進制整數;E或e是固定的字符,用于分割尾數部分和指數部分。整個表達式等價于a乘以10的n次方。
注意
只要寫成指數形式,就表示小數,即使它的最終值看起來像一個整數。例如14E3等價于14000,但14E3是一個小數。
提示
Python只有float一種小數類型。C語言有float和double兩種小數類型,float能容納的小數范圍比較小,double能容納的小數范圍比較大。
【例2-21】 浮點類型應用示例。
輸入如下代碼:
a = 25.5 print("a : ", a) print("Type a : ", type(a)) b = 0.6789123456 print("b : ", b) print("Type b : ", type(b)) c = 0.00000000000000000000000957 print("c : ", c) print("Type c: ", type(c)) d = 987654321123456789.789 print("d : ", d) print("Type d : ", type(d)) e = 34e5 print("e: ", e) print("Type e : ", type(e))
運行結果如下:
a : 25.5 Type a : <class 'float'> b : 0.6789123456 Type b : <class 'float'> c : 9.57e-24 Type c: <class 'float'> d : 9.876543211234568e+17 Type d : <class 'float'> e: 3400000.0 Type e : <class 'float'>
2.6.3 復數型

復數(complex)是Python的內置類型,直接書寫即可。換句話說,Python語言本身就支持復數,而不依賴于標準庫或者第三方庫。復數由實部(real)和虛部(imag)構成,在Python中,復數的虛部以j或者J作為后綴,具體格式為:a + bj。
【例2-22】 復數類型應用示例。
輸入如下代碼:
# 內置函數生成復數 com1 = complex(12, 102) print(com1) # 定義生成復數 com2 = 12 + 102j print(com2) # 復數計算 print('com1 + com2 = {}'.format(com1 + com2)) print('com1 * com2 = {}'.format(com1 * com2))
運行結果如下:
(12+102j) (12+102j) com1 + com2 = (24+204j) com1 * com2 = (-10260+2448j)
2.6.4 字節型

bytes只負責以字節序列的形式(二進制形式)存儲數據,至于這些數據到底表示什么內容(字符串、數字、圖片、音頻等),完全由程序的解析方式決定。如果采用合適的字符編碼方式(字符集),bytes可以恢復成字符串;反之亦然,字符串也可以轉換成bytes。
bytes是Python 3.x新增的類型。bytes只是簡單地記錄內存中的原始數據,至于如何使用這些數據,bytes并不在意,bytes并不約束使用方式。bytes類型的數據非常適合在互聯網上傳輸,可以用于網絡通信編程;bytes也可以用來存儲圖片、音頻、視頻等二進制格式的文件。
字符串和bytes存在著千絲萬縷的聯系,可以通過字符串來創建bytes對象,或者說將字符串轉換成bytes對象。有以下3種方法可以實現:
(1)如果字符串的內容都是ASCII字符,那么直接為字符串添加b前綴就可以轉換成bytes。
(2)bytes是一個類,調用它的構造方法,也就是bytes(),可以將字符串按照指定的字符集轉換成bytes;如果不指定字符集,那么默認采用UTF-8。
(3)字符串本身有一個encode()方法,該方法專門用來將字符串按照指定的字符集轉換成對應的字節串;如果不指定字符集,那么默認采用UTF-8。
【例2-23】 使用不同方式創建bytes對象示例。
輸入如下代碼:
#通過構造函數創建空 bytes b1 = bytes() #通過空字符串創建空 bytes b2 = b'' #通過b前綴將字符串轉換成 bytes b3 = b'I love python/' print("b3: ", b3) print(b3[3]) print(b3[7:22]) #為 bytes()方法指定字符集 b4 = bytes('大家好', encoding='UTF-8') print("b4: ", b4) #通過 encode()方法將字符串轉換成 bytes b5 = "大家好".encode('UTF-8') print("b5: ", b5)
運行結果如下:
#通過構造函數創建空 bytes b1 = bytes() #通過空字符串創建空 bytes b2 = b'' #通過b前綴將字符串轉換成 bytes b3 = b'I love python/' print("b3: ", b3) print(b3[3]) print(b3[7:22]) #為bytes()方法指定字符集 b4 = bytes('大家好', encoding='UTF-8') print("b4: ", b4) #通過encode()方法將字符串轉換成 bytes b5 = "大家好".encode('UTF-8') print("b5: ", b5)
從運行結果可以發現,對于非ASCII字符,print輸出的是它的字符編碼值(十六進制形式),而不是字符本身。非ASCII字符一般占用2字節以上的內存,而bytes是按照單字節來處理數據的,所以不能一次處理多字節。
2.6.5 布爾型

類似于其他編程語言,Python提供了布爾(bool)類型來表示True或False,比如比較算式5>3,在程序世界稱為真,Python使用True來代表;再比如比較算式4>20,在程序世界稱為假,Python使用False來代表。True和False是Python中的關鍵字,當作為Python代碼輸入時,一定要注意字母的大小寫,否則解釋器會報錯。
值得一提的是,布爾類型可以被作為整數對待,即True相當于整數值1,False相當于整數值0。
【例2-24】 布爾類型運算示例。
輸入如下代碼:
a = False + 10 b = True + 10 print('a = {}'.format(a)) print('b = {}'.format(b))
運行結果如下:
a = 10 b = 11
這里只是說明在Python中布爾類型可以這么使用,但不建議這么使用。
總的來說,布爾類型就是用于代表某個事情的真或假,如果這個事情是正確的,用True(或1)表示;如果這個事情是錯誤的,用False(或0)表示。
布爾類型在循環和判斷語句中將大顯身手,請看下面的例子。
【例2-25】 布爾類型真假示例。
輸入如下代碼:
print('me' == 'you') print('100' == 100) print(2 < 1) print(4 > 2) print('me' != 'you')
運行結果如下:
False False False True True
2.6.6 字符串型

所謂字符串,就是由零個或多個字符組成的有限序列,若干個字符的集合就是一個字符串(string)。Python中的字符串必須由雙引號""或者單引號''包圍,具體格式如下:
"字符串內容" '字符串內容'
字符串的內容可以包含字母、標點、特殊符號、中文、韓文等全世界的所有文字。
Python字符串中的雙引號和單引號沒有任何區別,而有些編程語言的雙引號字符串可以解析變量。以下字符串都是符合Python語法的字符串:
'我愛Python' 'www.hao123.com' 'love1314' '3.141592653'
上面介紹了Python字符串的定義和構成,下面對Python字符串中的一些常見問題和用法進行講解。
1.字符串中的引號
當字符串內容中出現引號時,需要進行特殊處理,否則Python會解析出錯,譬如下面的一行代碼:
'I'm a good person!'
由于上面的字符串中包含單引號,此時Python會將字符串中的單引號與第一個單引號配對,這樣就會把'I'當成字符串,而后面的m a great person!就變成了多余的內容,從而導致語法錯誤。對于這種情況,有以下兩種處理方案:
1)使用不同的引號包圍字符串
如果字符串內容中出現了單引號,那么可以使用雙引號包圍字符串,反之亦然。譬如以下代碼:

2)對引號進行轉義
在引號前面添加反斜杠“\”就可以對引號進行轉義,讓Python把它作為普通文本對待,譬如以下代碼:
str1 = 'I\'m a good person!' str2 = "引文雙引號是\",中文雙引號是"" print(str1) print(str2)
以上兩種處理方法運行結果相同,如下所示:
I'm a good person! 引文雙引號是",中文雙引號是“。
2.字符串的換行
Python不是格式自由的語言,它對程序的換行、縮進都有嚴格的語法要求。要想換行書寫一個比較長的字符串,必須在行尾添加反斜杠“\”。
【例2-26】 字符串轉換應用示例。
輸入如下代碼:

運行結果如下:
I love Python. I Love Coding. I Love Monday.
可以看出“\”對一行長代碼進行了換行顯示。
換行在之前簡單介紹過,這里再使用字符串進行代碼實踐,希望讀者對這種用法能有自己的理解,熟練掌握。
3.長字符串
所謂長字符串,就是可以直接換行(不用加反斜杠“\”)書寫的字符串。Python長字符串由3個雙引號"""或者3個單引號'''包圍,語法格式如下:
"""長字符串內容""" '''長字符串內容'''
在長字符串中放置單引號或者雙引號不會導致解析錯誤。如果長字符串沒有賦值給任何變量,那么這個長字符串就不會起任何作用,和一段普通的文本無異,相當于被注釋掉了。
當程序中有大段文本內容需要定義成字符串時,優先推薦使用長字符串形式,因為這種形式非常強大,可以在字符串中放置任何內容,包括單引號和雙引號。
【例2-27】 長字符串應用示例。
輸入如下代碼:

運行結果如下:
黃山境內分為溫泉、云谷、玉屏、北海、松谷、釣橋、浮溪、洋湖、福固9個管理區,有千米以上高峰88座, 黃山境內有大量的文化遺存,如古蹬道、古楹聯、古橋、古亭、古寺、古塔等。 另有現存摩崖石刻300余處。
長字符串中的換行、空格、縮進等空白符都會原樣輸出,所以以上代碼的輸出就是“long_str”這個長字符串原有的格式。
4.Python原始字符串
Python字符串中的反斜杠“\”有著特殊的作用,就是轉義字符。轉義字符有時會帶來一些麻煩,例如要表示一個包含Windows路徑D:\Program Files\Python 3.10\python.exe的字符串,在Python程序中不能直接這樣輸入,無論是普通字符串還是長字符串。
因為“\”的特殊性,需要對字符串中的每個“\”都進行轉義,也就是寫成D:\\Program Files\\Python 3.10\\python.exe這種形式才行。這種寫法需要特別謹慎,稍有疏忽就會出錯。為了解決轉義字符的問題,Python支持原始字符串。在原始字符串中,“\”不會被當作轉義字符,所有的內容都保持“原汁原味”的樣子。
在普通字符串或者長字符串的開頭加上r前綴,就變成了原始字符串,具體格式如下:
str1 = r'原始字符串內容' str2 = r"""原始字符串內容"""
以剛才的Windows環境路徑為例進行代碼實戰。
【例2-28】 Windows環境路徑應用示例。
輸入如下代碼:
ori_str = r'D:\Program Files\Python 3.10\python.exe' print(ori_str)
運行結果如下:
D:\Program Files\Python 3.10\python.exe
如果普通格式的原始字符串中出現引號,程序同樣需要對引號進行轉義,否則Python照樣無法對字符串的引號精確配對;但是和普通字符串不同的是,此時用于轉義的反斜杠會變成字符串內容的一部分。
注意
Python原始字符串中的反斜杠仍然會對引號進行轉義,因此原始字符串的結尾處不能是反斜杠,否則字符串結尾處的引號會被轉義,導致字符串不能正確結束。
- Dynamics 365 Application Development
- 人人都懂設計模式:從生活中領悟設計模式(Python實現)
- Java編程的邏輯
- Mastering Data Mining with Python:Find patterns hidden in your data
- Mastering Business Intelligence with MicroStrategy
- Sails.js Essentials
- Go語言從入門到精通
- Visual Basic程序設計全程指南
- Keil Cx51 V7.0單片機高級語言編程與μVision2應用實踐
- 少兒編程輕松學(全2冊)
- Learn Linux Quickly
- Python深度學習與項目實戰
- 編譯原理學習與實踐指導
- 51單片機C語言程序設計經典實例(第3版)
- Web應用程序設計:ASP