Python学习笔记_数目字

Python学习笔记_数字

  • Python学习笔记_数字
  • 整形
    • 布尔型
    • 标准整形
    • 长整形
  • 双精度浮点型
  • 复数
    • 复数的内建特性
  • 操作符
    • 混合模式操作符
    • 标准类型的操作符
    • 算数操作符
      • 除法
    • 位操作符只适用于整形
  • 内建函数与工厂函数
    • 标准类型函数
    • 数字类型函数
  • 其他数字类型
    • 布尔数
    • 十进制浮点数
  • 随机数

Python学习笔记_数字

整形

布尔型

布尔型的取值范围只有两个值,TrueFalse

标准整形

Python的标准整形就好比是32位的int类型,和C语言没有什么两样

整形一般都是以十进制表示,但是有些写法缺不是以十进制表示的

写法 所表示进制 栗子
以数字0开始 八进制数字 010(十进制为8)
以字符0x开始 十六进制数字 0x10(十进制为16)

长整形

Python里面的长整形不同于C语言里面的长整形,Python的长整形能表达的数值仅仅与机器支持的内存大小有关,可以很容易的表达一个很大的数

在一个整形值后面加上L,那么这个整形就是长整形,比如1234567890L,现在整形和长整形已经逐渐统一,用户将基本感觉不到两者的区别存在

双精度浮点型

Python的中的双精度浮点数有点类似于C语言中的double类型,但是二者还是有所不同,Python浮点数的实际今年度依赖于机器架构和创建Python解释器的编译器.

Python中的浮点数栗子:0.03.14161.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() 返回给定序列的一个元素

版权声明:本文为博主原创文章,未经博主允许不得转载。