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异常。
以上内容参照了官方的相关文档及网络中的其它文章总结而写。
新闻热点
疑难解答