python学习[第四篇] 数据类型之 数字
数字类型
数字类型分类
python数字类型分五类(整形有3个 浮点型 复数)
- 整形
- 标准整形 0101 84 -237 0x80 017 -680 -0x92
- 布尔型 True False
- 长整型 (能表达的数值与机器位数有关 ,用大写L表现长整型)
- 浮点数 0.0 -777.1.6 6.022e23 4.2E-10
- 复数
复数特有内建属性
num.real num.imag num.conjugate()
#复数赋值 aComplex=-8.333-1.47j # 复数属性--实部 aComplex.real # 复数属性--虚部 aComplex.imag # 复数属性--共轭复数 aComplex.conjugate()
操作符
数字类型转换
数字类型间的隐式类型转换(python 自动强制完成),只有当两个数字类型不同时才会进行,转换时python自动执行的,无需编码处理,特定情况可以使用python提供的coerce()内建函数实现转换
- 如果有一个操作数是复数,另一个操作数被转换为复数。
- 否则,如果有一个操作数是浮点数,另一个操作数被转换为浮点数。
- 否则,如果有一个操作数是长整型,另一个操作数被转换为长整型。
- 否则,两者必然都是长整型,无需类型转换。
标准类型操作符
以下五种标准操作符都适用于 数字类型。
字符串表示 ··
内建函数 cmp repr str type
值比较 < > <= >= == != <>
对象比较 is is not (int 无法使用此操作符,否则会报 TypeError: 'in <string>' requires string as left operand, not int)
布尔操作符 not and or
算术操作符
python支持单目操作符正好(+),符号(-);双目操作符 +、-、×、/、%、××,分别表示 加法,减法,乘法,除法,取余,幂运算。
除法
传统除法 : 整数除法 执行 1/2=0 浮点数执行真正的除法
真正的除法: from __future__ import division ; 1/2 =0.5
地板除 : // 1.0/2.0 =0.0 1/2=0
取余
% 和其他语言一致
幂运算 **
3**2=9
位操作符
python支持 标准位运算: 取反(~),按位与(&) 、或(|) 、 异或(^)、 左移(<<)、 右移(>>)
复数会被当作整数的2机制补码处理
左移和右移N位等同于无溢出检查的2的N次幂运算 :2**N
对长整型来说,位操作符 使用经修改的2进制补码形式,使得可以无限向左扩展。
内建函数与工厂函数
标准类型函数
cmp() str() type()
数字类型函数
工厂函数: int() long() bool() float() complex()
complex(2.4,-8) = (2.4-8j)
int 函数 细节 int函数有个默认参数为base,表示输入参数的进制数,即将x作为base指定的进制数转换为10进制。
int('5') ==> 5
int('5',base=10) ==> 5
int('15',base=16) ==>31 (1*16+5)
功能函数
abs() coerce() divmod() pow() round ()
coerce(num1,num2)将num1和num2转化为同一类型,然后以一个元组形式返回。 遵循数字类型转换规则。
coerce(1.3,134L) (1.3,134.0)
coerce(1j,134L) (1j,134+0j)
divmod() 对整型来说返回值是地板除和取余操作的结果 ,对浮点型 返回的商部分是 math.floor(num1/num2) ,对复数来说 返回的商部是 math.floor(num1/num2).real)
divmod(10,3) (3(地板除),1(取余))
divmod(10,2.5) (4.0,0.0)
divmod(2+1j,0.5-1j) (0j,(2+1j)
round()用于对浮点型进行四舍五入的运算,有一个可选的小数位参数,不提供的话返回与第一个参数最接近的整形。
round(3) (3.0)
round(3.49999) (3.0)
round(3.499999,1) (3.5)
仅用于整形的函数(进制转换)
1进制转换函数 返回值为str
bin() bin(17) ==> ’0b10001‘
oct() oct(17) ==> ‘05’
hex() hex(5 ==> ’0x11‘
2 ascii 转换函数
ord(num) 接受一个ascii字符或unicode字符,返回相应的ascii值或unicode值
chr(num) 接收ascii值的数字转换为 ascii字符,范围(0<=num<=255)
unichr(num) 接收unicode值的数字转换为unicode字符
布尔值细说
- 布尔值有两个永远不变的值 : True False
- 布尔值是整型的子类,但是不能再被继承而生成他的子类
- 没有__nonzero__()方法的对象默认值是True
- 对已值为零的任何数字或空集(空列表,空元组,空字典)其布尔值都是False
#以下情况为 False # None # False # 值为0的任意整数类型 0, 0L, 0.0, 0j. # 空序列 '', (), []. # 空映射 {}. # 如果一个类定义了__len__方法,且这两个方法返回# 值为0 那么这个类的实例为False(python2.7 __nonzeror__ 也可以) #除以上情况,其他的值都为True class C():pass c=C() bool(c) bool(C) class D(): def __len__(): return 0 d=D() bool(d) bool(D)
补充函数
num.bit_length()返回数字的2进制位数。
n=17
bin(17) ==> '0b10001'
n.bit_lenght() ==> 5
相关模块
decimal
>>> Decimal(0.1)+Decimal('0.1')
Decimal('0.2000000000000000055511151231')
array
math
operator
random