Python支持多种数字类型:整型、长整型、布尔型、双精度浮点型、十进制浮点型和复数
数字提供了标量贮存和直接访问,不可更改。(变更数字的值会生成新的对象)
给变量更新值的时候,并不是更改了对象(数字是不可更改的对象),而是新建了一个对象,将这个对象的值引用给变量
按照Python的法则,无法真正删除一个数值对象,仅仅是不再使用它。当然,你可以使用del来删除一个数值对象的应用。
Python的标准整型等价于C的(有符号)长整型。一般以十进制表示(八进制以数字“0”开始,十六进制以“0x”或“0X”开始)
Python的长整型能表达的数值取决于机器支持的(虚拟)内存大小有关。在整型后面加个L(大写小写都可以,当然现在几乎没有什么区别,除非你明确想要长整型),表示这个整型是长整型。(尽量使用L而不是l以免和1弄混,这里可以使用str()函数和repr()函数来读取,这样你就可以看到他们的区别)可以是十进制、八进制、十六进制。
关于Python中复数的几个概念:
- 虚数不能单独存在,他们总是和一个值为0.0的实数部分一起来构成一个复数
- 复数由实数部分和虚数部分构成
- 表示虚数的语法:real+imagj
- 实数部分和虚数部分都是浮点型
- 虚数部分必须有后缀j或者J
复数的属性如下:
属 性 | 描 述 |
num.real | 该复数的实部 |
num.imag | 该复数的虚部 |
num.conjugate() | 返回该复数的共轭复数 |
两个数字类型相加的时候,Python会自动检查,如果两个操作数是同一种数据类型,没有必要进行类型转换,仅当两个操作数类型不一致时,Python才会去检查是否可以将其中一个转换成另外一个。转换过程遵守以下几个原则:
- 如果有一个操作数是复数,另一个被转换为复数
- 否则,如果有一个操作数是浮点型,另一个操作数被转换为浮点型
- 否则,如果有一个操作数是长整型,另一个操作数被转换为长整型
- 否则,必然都是普通整型,无需类型转换。
数字类型的转换是自动进行的,如果明确指定某种数据类型进行特殊转换的场合,Python提供了coerce()内建函数来实现。
传统除法:对整型的除法舍去了小数部分仅保留整数部分,对浮点型执行真正的除法。
可以执行from __future__ import division来让所有除法都返回真实的商
//:可以对所有数值类型只执行地板除(舍去小数部分仅保留整数部分)
算术操作符 | 功 能 |
expr 1 ** expr 2 | 表达式一的表达式二乘方 |
+expr 1 | 结果符号不变 |
-expr 1 | 对结果符号取负 |
expr 1 * expr 2 | 表达式一乘以表达式二 |
expr 1/expr 2 | 表达式一除以表达式二(传统除或者真正除) |
expr 1//expr 2 | 表达式一地板除表达式二 |
expr 1%expr 2 | 表达式一对表达式二取余 |
expr 1+expr 2 | 表达式一加表达式二 |
expr 1-expr 2 | 表达式一减表达式二 |
** | 高于单目操作符(可以加括号来改变) |
Python整型支持标准位运算:
- 负数会被当成正数的2进制补码处理
- 左移或者右移N位等同于无溢出检查2的N次幂运算
- 对长整型来说,位操作符使用一种经修改的2进制补码形式,使得符号位可以无限向左扩展
- 取反等同于数字单目操作符优先级(所有位操作符中优先级最高)。左移和右移优先级次之,但低于加减法。与、或、异最低。
位操作符 | 功 能 |
~num | 对数的每一位取反。结果为-(num+1) |
num1<<num2 | num1左移num2位 |
num1>>num2 | num1右移num2位 |
num1&num2 | num1与num2按位与 |
num1^num2 | num1异或num2 |
num1|num2 | num1与num2按位或 |
工厂函数:bool(obj)、int(obj,base=10)(直接截取小数部分)、long(obj,base=10)、float(obi)、complex(str) or complex(real,inag=0.0)
函 数 | 功 能 |
abs(num) | 返回num的绝对值 |
coerce(num1,num2) | 将num1和num2转化为同一类型,然后以元组的形式返回 |
floor(num) | 得到最接近num但小于num的整型(返回浮点型) |
divmod(num1,num2) | 返回元组(num1/num2,num1%num2) |
pow(num1,num2,mod=1) | 取num1的num2次方,提供mod参数后,计算结果再对mod取余 |
round(flt,ndig=1) | 接受浮点型flt并四舍五入,保存ndig位小数,ndig默认为0 |
函 数 | 操 作 |
hex(num) | 将数字转换成十六进制并以字符串返回 |
oct(num) | 将数字转换成八进制并以字符串返回 |
chr(num) | 将ASCII值的数字转换为ASCII字符(0<=num<=255) |
ord(chr) | 接受一个ASCII或Unicode字符,返回对应值 |
unichr(num) | 接受Unicode码值返回对应字符 |
布尔类型主要概念:
- 有两个永不改变的值True或False
- 布尔型是整型的子类,但是不能再被继承而生成它的子类
- 没有__nonzero__()方法的对象的默认值是True
- 对于值为零的任何数字或空集(空列表、空元组、空字典等),在Python中布尔值都是False
- 对于数学运算,True=1,False=0
- True和False等同关键字,请不要随意修改。
模 块 | 介 绍 |
decimal | 十进制浮点运算类Decimal |
array | 高效数值数组(字符、整型、浮点型等) |
math/cmath | 标准C库数学运算函数。常规数学在math模块,复数运算在cmath模块 |
operator | 数字操作符的函数实现 |
random | 多种伪随机数生成器 |
randint() | 两个整型参数,返回二者间随机整型 |
randrange() | 接受和range()函数一样的参数,随机返回range([start,]stop[,step])结果的一项 |
uniform() | 几乎和randint()一样,不过返回二者间的浮点型 |
random() | 类似uniform(),不过下限恒等0.0,上限恒等1.0 |
choice | 随机返回给定序列的一个元素 |