【無為則無心&Python基礎】— 16.Python的數(shù)據(jù)類型轉換

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、floatstring變量的數(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'>
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容