说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
Python 的整数类型是内置的基础类型,int 类型实现了 numbers.Integral
抽象基类(abstract base class)的一些方法。 此外,它还提供了其他几个比较实用的方法。
int.bit_length()
返回以二进制表示一个整数所需要的位数,不包括符号位和前面的零:
n = -37
bin(n)
# '-0b100101'
n.bit_length()
# 6
更准确地说,如果 x 非零,则 x.bit_length()
是使得 2**(k-1) <= abs(x) < 2**k
的唯一正整数 k。 同样地,当 abs(x) 小到足以具有正确的舍入对数时,则 k = 1 + int(log(abs(x), 2))
。 如果 x 为零,则 x.bit_length()
返回 0。
等价于:
def bit_length(self):
s = bin(self) # 输出二进制: bin(-37) --> '-0b100101'
s = s.lstrip('-0b') # 删除前导的0和减号
return len(s) # len('100101') --> 6
这是 3.1 新版功能。
int.bit_count()
返回整数的绝对值的二进制表示中 1 的个数。也被称为 population count(种群统计)。示例:
n = 19
bin(n)
# '0b10011'
n.bit_count()
# 3
(-n).bit_count()
# 3
等价于:
def bit_count(self):
return bin(self).count("1")
这是 3.10 新版功能.
int.to_bytes()
返回表示一个整数的字节数组。语法是:
int.to_bytes(length, byteorder, *, signed=False)
示例如下:
(1024).to_bytes(2, byteorder='big')
b'\x04\x00'
(1024).to_bytes(10, byteorder='big')
b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00'
(-1024).to_bytes(10, byteorder='big', signed=True)
b'\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00'
x = 1000
x.to_bytes((x.bit_length() + 7) // 8, byteorder='little')
b'\xe8\x03'
整数会使用 length 个字节来表示。 如果整数不能用给定的字节数来表示则会引发 OverflowError。
byteorder 参数确定用于表示整数的字节顺序。 如果 byteorder 为 "big",则最高位字节放在字节数组的开头。 如果 byteorder 为 "little",则最高位字节放在字节数组的末尾。 要请求主机系统上的原生字节顺序,请使用 sys.byteorder
作为字节顺序值。
signed 参数确定是否使用二的补码来表示整数。 如果 signed 为 False 并且给出的是负整数,则会引发 OverflowError。 signed 的默认值为 False。
这是 3.2 新版功能.
int.from_bytes()
是一个类方法,返回由给定字节数组所表示的整数。
语法为:
int.from_bytes(bytes, byteorder, *, signed=False)
示例如下:
int.from_bytes(b'\x00\x10', byteorder='big')
# 16
int.from_bytes(b'\x00\x10', byteorder='little')
# 4096
int.from_bytes(b'\xfc\x00', byteorder='big', signed=True)
# -1024
int.from_bytes(b'\xfc\x00', byteorder='big', signed=False)
# 64512
int.from_bytes([255, 0, 0], byteorder='big')
# 16711680
参数的介绍:
sys.byteorder
作为字节顺序值。这是 3.2 新版功能.
int.as_integer_ratio()
返回一对整数元组,其比率正好等于原整数并且分母为正数。 整数的比率总是用这个整数本身作为分子,1 作为分母。
示例如下:
(5).as_integer_ratio()
# (5, 1)
(0).as_integer_ratio()
# (0, 1)
# 以下是浮点型
(-0.5).as_integer_ratio()
# (-1, 2)
(0.1).as_integer_ratio()
# (3602879701896397, 36028797018963968)
3.1415926535897932.as_integer_ratio()
# (884279719003555, 281474976710656)
得到的元组 (a, b),a/b 的结果就是原对象的值,其中 b 一定是正整数,这个在浮点型中非常有用,这里对整型进行了兼容,用于减少给定有理数的分数,用整型表示浮点表示的不精确性。比如,我们在传递数字的时间,为了防止浮点型丢失精度,可以转换为以上元组形式传递。
这是 3.8 新版功能。
如果直接用字面量调用方法和属性会报语法错误:
1.__class__
'''
File "<stdin>", line 1
1.__class__
^
SyntaxError: invalid decimal literal
'''
可以在点后增加一个或者多个空格,或括号将点隔开:
1 .__class__
# <class 'int'>
(1).__class__
# <class 'int'>
更新时间:June 4, 2022, 12:11 a.m. 标签:python 整数 方法