Python学习笔记_数字
整形
布尔型
布尔型的取值范围只有两个值,True
和False
标准整形
Python的标准整形就好比是32位的int
类型,和C语言
没有什么两样
整形一般都是以十进制表示,但是有些写法缺不是以十进制表示的
写法 | 所表示进制 | 栗子 |
---|---|---|
以数字0 开始 | 八进制数字 | 010(十进制为8) |
以字符0x 开始 | 十六进制数字 | 0x10(十进制为16) |
长整形
Python里面的长整形不同于C语言
里面的长整形,Python的长整形能表达的数值仅仅与机器支持的内存大小有关,可以很容易的表达一个很大的数
在一个整形值后面加上L
,那么这个整形就是长整形,比如1234567890L
,现在整形和长整形已经逐渐统一,用户将基本感觉不到两者的区别存在
双精度浮点型
Python的中的双精度浮点数有点类似于C语言
中的double
类型,但是二者还是有所不同,Python浮点数的实际今年度依赖于机器架构和创建Python解释器的编译器.
Python中的浮点数栗子:0.0
,3.1416
,1.345e-12
复数
Python下面的复数是由两部分组成的,一个是实部(real)
,一个是虚部(imag)
,一个复数就表示为:real+imagj
在Python中若要表示一个复数,就要遵循下面的约定:
- 虚数不能单独存在,他们总是和一个值为
0.0
的实部一起来构成一个复数 - 实数部分和虚数部分都是浮点型
复数的内建特性
属性 | 描述 |
---|---|
num.real | 得到复数的实部 |
num.imag | 得到复数的虚部 |
num.conjugate() | 返回该复数的共轭复数 |
操作符
混合模式操作符
如果将两个不同类型的数字相加,那么就存在一个类型转换的问题,其转换规则如下:
- 如果一个操作数是复数,那么另外一个操作数转换为复数
- 否则,如果其中一操作数是浮点型,那么另外一个操作数被转换为浮点型
- 否则,如果有一个操作数为长整形,那么另外一个操作数被转换为长整形
- 否则,两者必然都是普通整形,无需类型转换
Python提供了coerce()
内建函数帮助我们实现这种转换
举个栗子:
print coerce(1+1j , 1)
print coerce(1.0, 1)
print coerce(1+1j , 1.0)
#运行结果
#((1+1j), (1+0j))
#(1.0, 1.0)
#((1+1j), (1+0j))
标准类型的操作符
当两个操作数是同一种数值类型的时候,此时就会用到类型对应的标准类型操作符
算数操作符
单目运算符
运算符 | 执行的操作 |
---|---|
+ | 正号 |
- | 负号 |
双目运算符
运算符 | 执行的操作 |
---|---|
+ | 加法 |
- | 减法 |
* | 乘法 |
/ | 除法 |
% | 取余 |
** | 幂运算 |
// | 地板除 |
除法
在Python里面有三种的除法操作,他们分别是传统除法
,真正的除法
,地板除
这三者的区别如下:
除法类别 | 除法效果 |
---|---|
传统除法 | 如果操作数是整形,那么就舍弃小数部分,返回一个整形;如果是操作数之一是浮点数,那么就执行真正的除法(保留小数部分) |
真正的除法 | 不管操作数是什么类型的,都执行真正的除法,但是需要导入from __future__ import division |
地板除 | 不管操作数是什么累心赶得,操作都是向下取整 |
举个栗子:
传统除法栗子:
print 1/2
print -1/2
print 1.0/2
print -1.0/2
#运行结果
#0
#-1
#0.5
#-0.5
真正除法栗子:
from __future__ import division
print 1/2
print -1/2
print 1.0/2
print -1.0/2
#运行结果
#0.5
#-0.5
#0.5
#-0.5
地板除栗子:
print 1//2
print -1//2
print 1.0//2
print -1.0//2
#运行结果
#0
#-1
#0.0
#-1.0
传统除法和地板除的最大区别在于负数,传统除法是直接舍弃小数部分,地板除是向下取整。
位操作符(只适用于整形)
位操作符 | 功能 |
---|---|
~num | 对每一位取反 |
num1 << num2 | num1 左移 num2 位 |
num1 >> num2 | num1 右移 num2 位 |
num1 & num2 | num1 与 num2按位与 |
num1 | num2 | num1 与 num2按位或 |
num1 ^ num2 | num1 异或 num2 |
内建函数与工厂函数
标准类型函数
有三个标准类型的函数:cmp()
,str()
,type()
数字类型函数
转换工厂函数
工厂函数 | 操作 |
---|---|
bool(obj) | 返回对象的bool值 |
int(obj , base=10) | 返回一个字符串或者数值对象的整形表示 |
long(obj , base=10) | 返回一个字符串或者数据类型的长整表示 |
float(obj) | 返回一个字符串或者数据类型的浮点数表示 |
complex(str)或者complex(real,imag=0.0) | 返回一个字符串的复数表示,或者根据给定的实数返回一个复数 |
功能函数
函数 | 功能 |
---|---|
abs(num) | 返回num的绝对值 |
coerce(num1,num2) | 将num1和num2转换为同一类型,然后以一个元组的形式返回 |
divmod(num1,num2) | 返回一个元组(num1/num2 , num1%num2) |
pow(num1,num2,mod=1) | 取num1的num2次方,如果提供mod参数,那么结果再对mod进行取余运算 |
round(flt,ndig=1) | 接受一个浮点型flt进行四舍五入,保存ndig小数 |
这里要讲三个函数的区别,int()
,round()
,math.floor()
,下面列出其不同之处:
- 函数
int()
直接截去小数部分 - 函数
floor()
向下取整 - 函数
round()
四舍五入
仅用于整形的函数
函数 | 操作 |
---|---|
hex(num) | 将数字转换为十六进制数并以字符串形式返回 |
oct(num) | 将数字转换为八进制并以字符串返回 |
chr(num) | 将ASCII 值的数字转化为ASCII 字符 |
ord(num) | 接受一个ASCII 或者Unicode (长度为1),返回相应的ASCII 值或者Unicode 值 |
unichr(num) | 接受 Unicode 码值,返回对应的Unicode 字符 |
其他数字类型
布尔数
布尔数主要有下面几个值得注意的地方:
- 布尔型是整形的子类,但是不能再被继承
- 没有
__nonzero__()
方法的对象默认值是True
如果要定义一个心新类,并且想要根据根据对象的数据来决定对应的布尔值,那么就要定义__nonzero__()
方法
class C:
def __nonzero__(self):
# do some thing
return false
十进制浮点数
如果想要使用十进制浮点型,那么就要导入decimal
模板以便使用Decimal
类,注意不能混用十进制浮点型和普通浮点型
dec = Decimal(.1)#error
dec = Decimal(".1")#ok
dec + 0.1 #error
dec + Decimal("1.0")#ok
随机数
随机函数 | 产生的随机数 |
---|---|
randint() | 两个整形参数,返回二者之间的随机整数 |
randrange() | 随机返回range([start],stop,[step]) 结果中的一项 |
uniform() | 和randint() 一样,不过返回的是二者之间的浮点型 |
random() | 类似于uniform() ,不过下限是0.0 ,上限是1.0 |
choice() | 返回给定序列的一个元素 |