Python 中 int 用法详解
欢迎转载,转载请注明出处!
文章目录
0. 参考资料
- Python 官方文档
1. int 的无参数调用
不带参数直接 int(),得到的是整数 0。
num = int()
print(type(num))
print(num)
"""
<class 'int'>
0
"""
- 1
- 2
- 3
- 4
- 5
- 6
- 7
2. int 接收数字作为参数
int接收整数作为参数,其实没什么好说的,还是得到原来的那个整数。int接收浮点数作为参数,会截取该浮点数的整数部分,返回截取后的整数。
print(int(2.9)) # 2
print(int(2.1)) # 2
print(int(-2.9)) # -2
print(int(-2.1)) # -2
print(int(3.0)) # 3
- 1
- 2
- 3
- 4
- 5
3. int 接收字符串作为参数:类型转换
众所周知,int 函数可以将一个字符串转换为整数,这也是它最常见的用法:
s = input('请输入一个整数:')
print(type(s))
"""
<class 'str'>
"""
num = int(s)
print(type(num))
“”"
<class ‘int’>
“”"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
假如字符串 s 是一个浮点数形式的字符串,比如 '-3.14',直接用 int 进行类型转换会报 ValueError 错,如下所示:
s = '-3.14'
num = int(s)
"""
ValueError: invalid literal for int() with base 10: '-3.14'
"""
- 1
- 2
- 3
- 4
- 5
如果想要把浮点数形式的字符串转换为整数,需要先使用 float 把字符串转换为浮点数,再对该浮点数使用 int,把浮点数截取为整数,如下所示:
s = '-3.14'
num = int(float(s))
print(f'num = {num}')
"""
num = -3
"""
- 1
- 2
- 3
- 4
- 5
- 6
4. int 用于进制转换
到目前为止介绍的都是 int 的常见用法,接下来介绍的是相对少见的用法,int 可以将 2 进制到 36 进制的字符串、字节串(bytes)或者字节数组(bytearray)实例转换成对应的 10 进制整数。具体的调用形式为:int(x, base=10),其中 x 即为字符串、字节串或字节数组的实例。
参数说明
- 参数
x必须是合法的整数字面量integer literal。
整数字面量前面可以有正负号,但是正负号与数字之间不能有空格。
整数字面量两端可以出现任意数量的空白,包括空格键、制表符、换行符等等。
a-z或者A-Z分别表示10-35的数字。
二进制数字可以用0b或者0B做前缀,八进制数字可以用0o或者0O做前缀,十六进制数字可以用0x或者0X做前缀,前缀是可选的。 base默认是10,还可以取0以及2到36,不能是1,因为没有1进制。
base为0的时候会按照代码字面量(code literal)解析,即只能把2、8、10、16进制数字表示转换为10进制。对于2、8、16进制必须指明相应进制的前缀,否则会按照10进制解析。
默认情况:base=10
x = '6'
num1 = int(x)
num2 = int(x, 10)
print(num1)
print(num2)
"""
6
6
"""
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
其他进制转为 10 进制
x = '10'
num1 = int(x, 2)
num2 = int(x, 8)
num3 = int(x, 16)
print(num1)
print(num2)
print(num3)
"""
2
8
16
"""
x = ‘z’
num3 = int(x, 36)
print(num3)
“”"
35
“”"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
带正负号、空格的整数字面量
# 带正号
x = '+a0'
num = int(x, 16)
print(num)
"""
160
"""
# 带负号
x = ‘-a0’
num = int(x, 16)
print(num)
“”"
-160
“”"
# 两端带空白
x = ’ \t +a0\r\n '
num = int(x, 16)
print(num)
“”"
160
“”"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
base=0 时按照代码字面量直接解析
x = '10'
num = int(x, 0)
print(num)
"""
10
"""
x = ‘0b10’
num = int(x, 0)
print(num)
“”"
2
“”"
x = ‘0o10’
num = int(x, 0)
print(num)
“”"
8
“”"
x = ‘0x10’
num = int(x, 0)
print(num)
“”"
16
“”"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
5. 版本特性
3.4 版本变化
- 如果
base参数不是int类的实例,那么会调用它的base.__index__方法,该方法返回一个整数供base参数使用。 - 之前的版本调用的是
base.__int__而不是base.__index__。
3.6 版本变化
- 代码字面量(
code literal)中允许使用下划线_来对数字进行分组。
3.7 版本变化
x现在变成了强制位置参数positional-only parameter。
# Python 3.6
x = 'a'
num = int(x=x, base=16)
print(num)
"""
10
"""
# 调过来也可以
x = 'a'
num = int(base=16, x=x)
print(num)
"""
10
"""
# Python 3.7 会报错
>>> x = ‘a’
>>> num = int(x=x, base=16)
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
TypeError: ‘x’ is an invalid keyword argument for int()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21











