欢迎来到我的博客园

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

posted @ 2018-07-05 13:19  panzq  阅读(300)  评论(0编辑  收藏  举报