1、為什么要進行數(shù)據(jù)類型轉換
使用Python處理數(shù)據(jù)時,不可避免的要使用數(shù)據(jù)類型之間的轉換。如int、float、string之間的轉換。
例如:
問:通過
input( )函數(shù)接收用戶輸入的數(shù)據(jù)都是字符串類型,如果用戶輸入1,想得到整型該如何操作?答:轉換數(shù)據(jù)類型即可,即將字符串類型轉換成整型。
2、數(shù)據(jù)類型轉換本質(zhì)
- 所謂的類型轉換,將一個類型的對象轉換為其他對象。
- 類型轉換不是改變對象本身的數(shù)據(jù)類型,而是根據(jù)當前對象的值創(chuàng)建一個新對象,因為
int、float、string變量的數(shù)據(jù)類型是不會改變的,需要把這個新創(chuàng)建的數(shù)據(jù)對象,賦值給當前對象的引用變量,那么變量的數(shù)據(jù)類型才會發(fā)生改變。
3、數(shù)據(jù)類型轉換用到的函數(shù)
下面是我們常用到的一個數(shù)據(jù)類型轉換函數(shù)的列表。
| 函數(shù) | 說明 |
|---|---|
| int(x [,base ])(常用) | 將x轉換為一個整數(shù) |
| float(x )(常用) | 將x轉換為一個浮點數(shù) |
| complex(real [,imag ]) | 創(chuàng)建一個復數(shù),real為實部,imag為虛部 |
| str(x )(常用) | 將對象 x 轉換為字符串 |
| repr(x ) | 將對象 x 轉換為表達式字符串 |
| eval(str )(常用) | 用來計算在字符串中的有效Python表達式,并返回一個對象 |
| tuple(s )(常用) | 將序列 s 轉換為一個元組 |
| list(s )(常用) | 將序列 s 轉換為一個列表 |
| chr(x ) | 將一個整數(shù)轉換為一個Unicode字符 |
| ord(x ) | 將一個字符轉換為它的ASCII整數(shù)值 |
| hex(x ) | 將一個整數(shù)轉換為一個十六進制字符串 |
| oct(x ) | 將一個整數(shù)轉換為一個八進制字符串 |
| bin(x ) | 將一個整數(shù)轉換為一個二進制字符串 |
我們下面對標識有常用的方法進行說明,其他的函數(shù),我們用到的話自己按照文檔練習一下就可以會用。
4、常用數(shù)據(jù)類型轉換函數(shù)說明
(1)int( )函數(shù)
int( )函數(shù)可以用來將其他的對象數(shù)據(jù)類型轉換為整型。
# 1、布爾值轉換為整型:True -> 1 False -> 0
a = True
"""
調(diào)用int()來將a轉換為整型。
int()函數(shù)不會對原來的變量a產(chǎn)生影響,
int()函數(shù)是將對象轉換為指定的數(shù)據(jù)類型,并將其作為返回值返回。
如果希望修改原來的變量,則需要對變量進行重新賦值
這里很重要,一定要理解。
"""
# 調(diào)用int()來將a轉換為整型。
int(a)
# int()函數(shù)不會對原來的變量a產(chǎn)生影響,打印結果可以看出。
print(type(a)) # <class 'bool'>
# 如果希望修改原來的變量,則需要對變量進行重新賦值
a = int(a)
print(type(a)) # <class 'int'>
# 2、浮點數(shù):直接取整,省略小數(shù)點后的內(nèi)容。
i = 123.456
# 變量沒有重新賦值,原變量數(shù)據(jù)沒有任何改變
int(i)
print(i) # 123.456
print(type(i)) # <class 'float'>
# 變量重新賦值后,數(shù)值和類型都發(fā)生了改變。
i = int(i)
print(i) # 123
print(type(i)) # <class 'int'>
"""
# 3、字符串:合法的整數(shù)字符串,直接轉換為對應的數(shù)字
如果不是一個合法的整數(shù)字符串,則報錯:
ValueError: invalid literal for int() with base 10: '數(shù)值'。
對于其他不可轉換為整型的對象,直接拋出異常 TypeError。
(如果出現(xiàn)TypeError的報錯,說明類型轉換異常了,換句話說就是該類型不能這么轉換)
"""
# 合法的整數(shù)字符串
i = "123456"
i = int(i)
print(i) # 123456
print(type(i)) # <class 'int'>
# 合法的整數(shù)字符串
j = "123.456"
j = int(j)
print(j)
print(type(j))
# 在第二行,數(shù)據(jù)類型轉換的時候就會報錯
# ValueError: invalid literal for int() with base 10: '123.456'
# 對于其他不可轉換為整型的對象,直接拋出異常 ValueError。
# 如:None
k = None
k = int(k)
# 報出異常:TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'
(2)float( )函數(shù)
float函數(shù)可以用來將其他的對象數(shù)據(jù)類型轉換為小數(shù)。
"""
float()函數(shù)和int()函數(shù)的用法基本一致,不同的是它會將對象轉換為浮點數(shù)。
1、布爾值:True -> 1.0 False -> 0.0。
2、整型:整數(shù)后邊直接加上.0,如:15.0。
3、字符串:合法的數(shù)字(整數(shù),小數(shù))字符串,直接轉換為對應的數(shù)字。
4、對于其他不可轉換為整型的對象,直接拋出異常 TypeError
(如果出現(xiàn)TypeError的報錯,說明類型轉換異常了,換句話說就是該類型不能這么轉換))
"""
# 簡單練習,整型
i = 15
i = float(i)
print(i) # 15.0
print(type(i)) # <class 'float'>
# 簡單練習,字符串
i = "15"
i = float(i)
print(i) # 15.0
print(type(i)) # <class 'float'>
j = "15.12312"
j = float(j)
print(j) # 15.12312
print(type(j)) # <class 'float'>
# 簡單練習,None
# 同int()函數(shù)
(3)str( )函數(shù)
str( )函數(shù)可以用來將其他的對象數(shù)據(jù)類型轉換為字符串。
"""
1、布爾值:True -> 'True' False -> 'False'
2、數(shù)值型直接原樣轉換成字符串
3、對于None類型,轉換成字符串時,并沒有報錯。
(可能沒學到的類型數(shù)據(jù)也不會報錯)
"""
# 簡單練習,float
i = 15.1231
i = str(i)
print(i) # 15.1231
print(type(i)) # <class 'str'>
# 對于None類型,轉換成字符串時,并沒有報錯。
k = None
k = str(k)
print(k) # None
print(type(k)) # <class 'str'>
(4)bool( )函數(shù)
bool( )函數(shù)可以將對象轉換為布爾值,任何對象都可以轉換為布爾值。
"""
規(guī)則:
對于所有表示空性的對象都會轉換為False,其余的轉換為True
哪些表示的空性:0 、 None 、 ''(空串) 。其他的可變對象學后再說。
"""
# 簡單練習,非空性
i = 15.1231
i = bool(i)
print(i) # True
print(type(i)) # <class 'bool'>
# 簡單練習,非空性
j = "python"
j = bool(j)
print(j) # True
print(type(j)) # <class 'bool'>
# 簡單練習,非空性
k = None
k = bool(k)
print(k) # False
print(type(k)) # <class 'bool'>
(5)eval( )函數(shù)
-
eval( )函數(shù)是Python中的一個內(nèi)置函數(shù)。 - 一般我們會這樣描述evel()函數(shù),把字符串里邊的數(shù)據(jù)轉換成他原本的類型。
-
eval( )函數(shù)用法也是非常的靈活,我們主要說明通過eval( )函數(shù)把字符串轉換成其他對象數(shù)據(jù)類型。
示例:
str1 = 'True'
str2 = '1'
str3 = '1.1'
str4 = '(1000, 2000, 3000)'
str5 = '[1000, 2000, 3000]'
print(type(eval(str1))) # <class 'bool'>
print(type(eval(str2))) # <class 'int'>
print(type(eval(str3))) # <class 'float'>
print(type(eval(str4))) # <class 'tuple'>
print(type(eval(str5))) # <class 'list'>