目录
比较操作符(>、>=、<、<=、+=、-=、*=、/=、==、!=)
简介
Python中的基本数字有int、float、complex,没有python2的长整型了。其中,浮点数需要注意四舍五入问题。本篇文章不介绍complex,抱歉了,博主平时不用complex,可能以后用了会再更新。另外,本专栏其他文章会提及模块,但不会说里面的具体内容,由于数字中decimal、fractions用的比较多,所以后面会有部分展示。
操作符
创建、赋值、更新(操作符=)
>>> b = True
>>> i = 5
>>> f = 2.3
>>> print(b,i,f)
True 5 2.3
>>> print(type(b),type(i),type(f))
<class 'bool'> <class 'int'> <class 'float'>
算数操作符(操作符 +、-、*、/、//、%、**)
+、-、*、/ 比较简单,其中bool型True当做1、False当做0。
>>> b+i
6
>>> b+f
3.3
>>> i-f
2.7
>>> i*f
11.5
>>> f/i
0.45999999999999996
>>> f/b
2.3>>> i//f
2.0
>>> 5//2
2>>> 5//1.9
2.0>>> i%f
0.40000000000000036
>>> 5%2
1
>>> i**2
25
>>> f**2
5.289999999999999
有浮点数参与,结果为浮点数。
//是地板除,数学上,5除以1.9为2.631578947368421,但是//会省去小数。
比较操作符(>、>=、<、<=、+=、-=、*=、/=、==、!=)
>>> b>i
False
>>> i<f
False
>>> i>=5
True
>>> f<=3
True
>>> i+=2
>>> i
7
>>> f-=1.2
>>> f
1.0999999999999999
>>> i*=2
>>> i
14
>>> i/=7
>>> i
2.0
>>> f==1.1
False
>>> f!=1.1
True
>>> print(type(b),type(i),type(f))
<class 'bool'> <class 'float'> <class 'float'>
>>> print(b,i,f)
True 2.0 1.0999999999999999
注意:
浮点数精度问题,内置函数round解决
整型、浮点型转换问题,自动转换,想要固定结果使用内置函数int、float转换解决
转换规则:存在浮点数,则非浮点数转为浮点数,不存在浮点数则转为整数。
其余内容在下面内置函数那一节进行展示。
整型按位运算(|、^、<<、>>、~)
>>> x = 2
>>> y = 3
位数 | ... | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|
x | 0 | 0 | 0 | 1 | 0 |
y | 0 | 0 | 0 | 1 | 1 |
| 0 | 0 | 0 | 1 | 1 |
| 0 | 0 | 0 | 0 | 1 |
| 0 | 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 0 | 0 |
| 0 | 0 | 0 | 0 | 0 |
| 1 | 1 | 1 | 0 | 1 |
>>> x|y
3
>>> x^y
1
>>> x&y
2
>>> x<<2
8
>>> x>>3
0
>>> ~x
-3
注意:
-
左移 n 位等价于不带溢出检测地乘以
pow(2, n)
。 -
右移 n 位等价于除以
pow(2, n)
,作向下取整除法。
删除(关键字del)
不建议程序员主动删除
del 变量名
>>> del x
>>> x+2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
方法
布尔、整数
bool是int的子类型,方法一致。
二进制长度
以二进制表示的必要长度,不包括符号位和前面的零
bit_length
>>> x.bit_length()
2
>>> True.bit_length()
1
字节
from_bytes(bytes, byteorder, *, signed=False)
bytes:字节序列
byteorder:big:从前找有意义的位数、little:从后找有意义的位数
signed:是否使用2的补码来表示整数
返回由给定字节数组所表示的整数
>>> y.from_bytes(b'\x01\x00',byteorder='big')
256
>>> y.from_bytes(b'\x01\x00',byteorder='little')
1>>> int.from_bytes(b'\x01\x01',byteorder='little',signed='true')
257
to_bytes(length, byteorder, *, signed=False)
>>> x.to_bytes(2,byteorder='big')
b'\x00\x02'
>>> x.to_bytes(2,byteorder='little')
b'\x02\x00'
>>> x.to_bytes(2,byteorder='big',signed='True')
b'\x00\x02'
浮点数
十六进制
fromhex
返回以十六进制字符串 s 表示的浮点数的类方法。 字符串 s 可以带有前导和尾随的空格。
>>> f = float.fromhex('101')
>>> f
257.0
hex
以十六进制字符串的形式返回一个浮点数表示。 对于有限浮点数,这种表示法将总是包含前导的 0x
和尾随的 p
加指数。
>>> f.hex()
'0x1.0100000000000p+8'
整数判断
is_integer
如果 float 实例可用有限位整数表示则返回 True
,否则返回 False
>>> f.is_integer()
True
>>> 2.3.is_integer()
False
分数
as_integer_ratio
返回一对整数,其比率正好等于原浮点数并且分母为正数。
>>> f.as_integer_ratio()
(257, 1)
>>> 2.5.as_integer_ratio()
(5, 2)
内置函数
转换工厂
bool
返回一个布尔值,True
或者 False
。bool类是int的子类。任何数值类型的零: 0
, 0.0
, 0j
, Decimal(0)
, Fraction(0, 1)都是False,其余数值为True。
>>> bool(5)
True
>>> bool(0)
False>>> bool(-2)
True
int(x, base=10)
返回一个使用数字或字符串 x 生成的整数对象,或者没有实参的时候返回 0。
对于浮点数,它向零舍入。
如果 x 不是数字,或者有 base 参数,x 必须是字符串、bytes、表示进制为 base 的整数字面值的bytearray
实例。
>>> int(23.4,base=8)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: int() can't convert non-string with explicit base
>>> int('011',base=8)
9
如果不是默认的10,而是自己填写了参数的话,就不能是数字了,否则报TypeError。
float
返回从数字或字符串 x 生成的浮点数。
如果实参是字符串,则它必须是包含十进制数字的字符串,字符串前面可以有符号,之前也可以有空格。
>>> float(233)
233.0
>>> float('ABCD')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: could not convert string to float: 'ABCD'>>> float(' 192.04 ')
192.04
进制
bin
将一个整数转变为一个前缀为“0b”的二进制字符串。
>>> bin(2)
'0b10'
hex
将整数转换为以“0x”为前缀的小写十六进制字符串。
>>> hex(-1)
'-0x1'
>>> hex(255)
'0xff'
oct
将一个整数转变为一个前缀为“0o”的八进制字符串。
>>> oct(8)
'0o10'
>>> oct(-20)
'-0o24'
计算
round(number[, ndigits])
返回 number 舍入到小数点后 ndigits 位精度的值。
上面的浮点数精度问题
>>> f = 2.3
>>> f-1.2
1.0999999999999999
>>> round(f-1.2,1)
1.1
>>> round(0.5)
0
>>> round(0.5,1)
0.5
>>> round(1.325,2)
1.32
>>> round(1.315,2)
1.31
注意:此函数不能解决四舍五入问题
>>> from _pydecimal import Decimal
>>> print(Decimal(1.325))
1.3249999999999999555910790149937383830547332763671875
>>> print(Decimal(1.315))
1.314999999999999946709294817992486059665679931640625>>> print(Decimal(1.365))
1.3649999999999999911182158029987476766109466552734375
>>> print(Decimal(1.375))
1.375>>> print(Decimal(1.385))
1.3850000000000000088817841970012523233890533447265625
>>> print(Decimal(1.395))
1.395000000000000017763568394002504646778106689453125
可以看出实际保存的比较玄学,四舍五入问题的解决请看模块部分。 其实,这是银行家舍入法:四舍六入五考虑,五后非空就进一,五后为空看奇偶,五前为偶应舍去,五前为奇要进一。
>>> round(1.365,2)
1.36
>>> round(1.375,2)
1.38
>>> round(1.385,2)
1.39
abs
返回一个数的绝对值。实参可以是整数、布尔值或浮点数。如果实参是一个复数,返回它的模。
>>> abs(-5)
5
>>> abs(-5.6)
5.6
>>> abs(False)
divmod
它将两个(非复数)数字作为实参,并在执行整数除法时返回一对商和余数。对于整数,结果和 (a // b, a % b)
一致。对于浮点数,结果是 (q, a % b)
,q 通常是 math.floor(a / b)
但可能会比 1 小。在任何情况下, q * b + a % b
和 a 基本相等;如果 a % b
非零,它的符号和 b 一样,并且 0 <= abs(a % b) < abs(b)
。
>>> a = 10
>>> b = 3>>> divmod(a,b)
(3, 1)
>>> divmod(float(a),float(b))
(3.0, 1.0)
相关模块
四舍五入
decimal
>>> from _pydecimal import Decimal, Context, ROUND_HALF_UP
>>> print(Context(prec=3, rounding=ROUND_HALF_UP).create_decimal('1.325'))
1.33
>>> print(Context(prec=3, rounding=ROUND_HALF_UP).create_decimal('1.365'))
1.37
其他舍入模式、方法请自行学习
分数
fractions
>>> from fractions import Fraction
>>> Fraction(18,-9)
Fraction(-2, 1)
>>> Fraction()
Fraction(0, 1)
>>> Fraction('4/6')
Fraction(2, 3)
>>> Fraction('1.25')
Fraction(5, 4)
>>> print(Fraction('1.25'))
5/4
其他
math
x 截断为 | |
<= x 的最大 | |
>= x 的最小 |
numbers
cmath
random
statistics
更多python相关内容:【python总结】python学习框架梳理
本人b站账号:lady_killer9
有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。如果您感觉有所收获,自愿打赏,可选择支付宝18833895206(小于),您的支持是我不断更新的动力。