int()函數是Python的一個內置函數,其作用是把一個數字或字符串轉換成整型數據,或者在沒有傳遞任何參數時返回0.
官方文檔給出的語法格式如下
class int([x = 0])
class int(x, base = 10)
x:一個數字或字符串,若x不是數字或者指定了參數base時,x必須是一個字符串;
base:數字基于的基,即轉換數字的進制。默認為10進制。
該函數的返回值是一個整型數。
如上面所述,該函數沒有參數時,返回0值。
a = int()
print("a=", a)
print(type(a))
輸出結果如下:
a= 0
<class 'int'>
在Python 3.8.2中的輸出如下圖所示:
數字可以是整型數、浮點數或其它進制的數字。
print(int(12))
print(int(10.2))
print(int(10.89))
print(int(-10.89))
print(int(0b1001))
print(int(0o57))
print(int(0xFC))
輸出結果如下:
12
10
10
-10
9
47
252
從上面的輸出結果可以看出:int()函數對浮點數不是進行的四舍五入操作,而是取浮點數的整數部分;int()函數會把其他進制的數字轉換成十進制形式。
參數是字符串時,字符串中的數字只能是整數,不能是小數,其它進制的數字需要配合base參數。
>>> print(int('100'))
100
>>> print(int('10.4'))
Traceback (most recent call last):
File "<pyshell#15>", line 1, in <module>
print(int('10.4'))
ValueError: invalid literal for int() with base 10: '10.4'
>>> print(int('0b1001'))
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
print(int('0b1001'))
ValueError: invalid literal for int() with base 10: '0b1001'
>>>
使用base參數時,參數x必須是字符串、字節或字節數組,且x所表示的進制數需跟base指定的進制一致。
base的取值范圍為從2到36,或者取值為0,base默認取值為10.
基為n的一個字符序列,其包含的有效數位為0~n-1,超過9的數位使用字母 a 到 z (或者 A 到 Z )來表示,分別代表10~35的數值,這也就解釋了為什么base的最大取值只能為36。
基為2, 8和16的數字字符串也可以分別加前綴'0b/0B','0o/0O'和'0x/0X'。
當base取值為0時,int函數要精確解釋每個數位,其合法的字符串只能是以二進制、八進制、十六進制前綴開始的數字字符或1~9開始的數字字符,那么int('010',0),int('AF',0)的用法會報錯,而int('010'),int('0b010',0),int('0o010',0)以及int('0x010',0)的寫法則是有效的寫法。
下面這些例子是把字符串100運用到int()函數的情形:
因為字符串“100”中包含的數位是2~36進制中的有效數位,所以int()函數都可以正確執行;超過36的數將是無效的參數值,將引發“ValueError”錯誤。
下面再給出一組例子用于說明base參數的使用情況:
>>> int('78',2)
Traceback (most recent call last):
File "<pyshell#44>", line 1, in <module>
int('78',2)
ValueError: invalid literal for int() with base 2: '78'
>>> int('78', 9)
71
>>> int('0b1001',2)
9
>>> int('1001', 2)
9
>>> int('0O67', 8)
55
>>> int('0O67', 9)
Traceback (most recent call last):
File "<pyshell#49>", line 1, in <module>
int('0O67', 9)
ValueError: invalid literal for int() with base 9: '0O67'
>>> int('0xF35', 16)
3893
>>>
上面這組例子說明:當使用前綴的進制格式時,base只能取對應的值,否則也會引發“ValueError”錯誤。當然,當base取得足夠大,使其數位包含了前綴中的字母,也可以正確輸出。
當使用base參數時,x的取值只能是字符串、字節數據或字節數組類型。
a = int(bytes("-16", "utf-8"))
print(a)
b = int(bytearray("-0F1", "utf-8"),16)
print(b)
輸出結果如下:
-16
-241
如果用戶對象x中定義了__int__()函數,則int(x)返回x.__int__()的值;如果對象x中定義了__trunc__()函數,則int(x)返回x.__trunc__()的值。
class MySite:
age = 0
def __int__(self):
print('調用了__int__()函數:')
return self.age
def __trunc__(self):
print('調用了__trunc__()函數:')
return self.age
x = MySite()
x.age = 13
print(int(x))
輸出結果如下:
調用了__int__()函數:
13
如果把__int__()的定義刪除掉或注釋掉后,輸出的結果如下:
調用了__trunc__()函數:
13
把__int__()和__trunc__()兩個函數的定義都刪除掉或注釋掉后的輸出結果如下:
Traceback (most recent call last):
File "D:/01Lesson/PY/int.py", line 34, in <module>
print(int(x))
TypeError: int() argument must be a string, a bytes-like object or a number, not 'MySite'
在Python 3.4版本增加了__index__()函數,如果對象中未定義__int__()函數,則調用__index__()函數。
在Python 3.6版中,int()函數增加了對以下劃線“_” 進行分組數字的支持:
>>> int(123_1234)
1231234
>>> int('123_1234')
1231234
>>> int('123_1234', 8)
340636
在Python 3.7版本中,x變成位置參數,即不能使用等號=進行賦值,即 x = 23這種使用方法不再被允許。
Python中int()函數是一個內置函數,其作用:
(1)x的取值可以是數值型數據,數字字符串或字節數據(bytes)或字節數組數據(bytearray)
(2)x取整數值時,直接返回其本身;
(3)x為浮點數時,截取整數部分;
(4)x為數字字符串時,在未指定base參數時,默認對字符串中的每個字符按10進制進行解釋,并將其轉換成10進制數;在指定base時,使用以base為基進行解釋字符串中的字符;base的有效取值為2~36,或0。base以n為基時,其有效數位為0~n-1,超出9時,分別使用a到z(或A到Z)字母表示對應的數碼位。
(5)在base取2,8,16時,字符串表示的數字可以加前綴'0b/0B','0o/0O','0x/0X';
(6)在x取值為數值型數據時,不能同時使用base參數;只有x為字符串或字節數據或字節數組數據時,才能使用base采納數;
(7)int()函數按照base指定的進制無法解釋x中的字符時,將引發ValueError錯誤。
(8)在用戶定義對象中,int(x)將按照__int__(),__index__()、__trunc__()的順序查找定義,如無任何定義,則引發TypeError異常。
以上內容參照了官方的相關文檔及網絡中的其它文章總結而寫。
新聞熱點
疑難解答