首页 > 开发 > Python > 正文

Python int()函数

2023-04-25 12:32:00
字体:
来源:转载
供稿:网友

int()函数是Python的一个内置函数,其作用是把一个数字或字符串转换成整型数据,或者在没有传递任何参数时返回0.

语法格式

官方文档给出的语法格式如下

class int([x = 0])
class int(x, base = 10)

参数

x:一个数字或字符串,若x不是数字或者指定了参数base时,x必须是一个字符串;

base:数字基于的基,即转换数字的进制。默认为10进制。

返回值

该函数的返回值是一个整型数。

Python int()函数

不带参数的输出

如上面所述,该函数没有参数时,返回0值。

a = int()
print("a=", a)
print(type(a))

输出结果如下:

a= 0
<class 'int'>

在Python 3.8.2中的输出如下图所示:

Python int()不带参数的例子

带数字参数的例子

数字可以是整型数、浮点数或其它进制的数字。

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()函数会把其他进制的数字转换成十进制形式。

Python 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参数

使用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()函数的情形:

Python int()函数base参数的使用

因为字符串“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的取值只能是字符串、字节数据或字节数组类型。

Python中的base参数的使用

字节数据或字节数组数据的使用

a = int(bytes("-16", "utf-8"))
print(a)

b = int(bytearray("-0F1", "utf-8"),16)
print(b)

输出结果如下:

-16
-241

int函数用于用户对象中

如果用户对象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异常。

以上内容参照了官方的相关文档及网络中的其它文章总结而写。

上一篇:Python chr()函数

下一篇:Python rsplit()函数

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表