Python3标准数据类型之Number

接下来会做一个Python的系列专题,从基础到进阶。下面就从数开始吧!

Number(数)

Number是Python3中的六个标准数据类型之一。也是不可变数据。

Python中的数有四种类型:

  • int(整数)— 通常被称为整型或整数,是正或负整数,不带小数点。Python3中,只有一种整数类型int,表示为长整型,所以在Python3中不需要考虑整型是否会溢出的问题。
  • bool(布尔)
  • float(浮点数)— 浮点型由整数部分与小数部分组成,浮点也可以使用科学计数法表示 ( 2.5 e 2 = 2.5 ∗ 1 0 2 = 250 ) (2.5e2 = 2.5*10^2 = 250) (2.5e2=2.5102=250)
  • complex(复数)

每个数都是一个对象(Object),在计算机内存中都有自己的一个 “家”(即地址),这象征着它的身份。

>>> id(2)
10914528
>>> id(3.0)
140424546017928
>>> id(False)
10300256
>>> id(4+3j)
140424514687920

这里的id()函数是Python中的一个内建函数,用于查看内存地址,且得到的结果是只读的。上面返回的各个结果不同,也说明了,上面的几个“数”是不同的对象。除此之外,能够标识它们不一样的身份的还有一个函数,那就是type()函数。

>>> type(2)
<class 'int'>

>>> type(3.0)
<class 'float'>

>>> type(False)
<class 'bool'>

>>> type(4+3j)
<class 'complex'>

内建函数type()能够查看对象的类型。与id()的结果类似,type()得到的结果也是只读的。

此外,还可以用isinstance()函数来判断对象类型。

>>> a = 11
>>> isinstance(a,int)
True
>>> isinstance(a,float)
False
数值的运算
>>> 2+3				#加法
5
>>> 4.3-2			#减法
2.3
>>> 2*3				#乘法
6
>>> 4/2				#除法,得到一个浮点数
2.0
>>> 4//2			#除法,得到一个整数(也叫地板除)
2
>>> 8%3				#取模(取余)
2	
>>> 2**4			#乘方
16
除法

这里单独来讲一下除法,因为它常常会给人带来困惑,不仅是在Python中,在其他高级编程语言中也是一样的。更何况,在Python2和Python3中除法也不尽相同,不过本文还是以Python3为主来讲解。

>>> 4/2
2.0
>>> 
>>> 4.0/2
2.0
>>> 4/2.0
2.0
>>> 4.0/2.0
2.0

观察以上代码会发现,两个整数相除,结果却是浮点数。但,这就是Python3的规则。如果我们想要得到整型的结果可以这样做

>>> 4//2
2

//的操作结果是取得两个数相除的商,“商”肯定是一个整数,并且这个整数不是/操作之后得到的结果进行四舍五入,通俗地说是“取整”。

奇怪的计算

在Python3中,除法运算的结果是浮点数。不过像下面的计算就有点奇怪了。

>>> 10.0/3
3.3333333333333335

按照数学知识,计算结果应该是3.3333…,后面的3是无限循环。这样的话,计算机就停不下来了,满屏都是3。为了避免出现这样的情况,Python终结了循环,但是并没有按照“四舍五入”的原则终止。

还有更奇怪的计算结果:

>>> 0.1+0.7
0.7999999999999999
>>> 0.1+0.7-0.8
-1.1102230246251565e-16
>>> 0.1+0.2+0.3-0.6
1.1102230246251565e-16

what??,为什么这么简单的问题在计算机会出现这样的情况?其实,出现这样的情况是由于十进制数和二进制数的转换。计算机用二进制数进行计算,但在上面的例子中,我们输入的是十进制数,所以计算机需要把十进制的数转化为二进制数,然后再进行计算。但是,在将类似0.1这样的浮点数转化为二进制数时,就出现问题了。0.1转化为二进制数后,不会精确等于十进制数的0.1。同时,计算机存储的位数是有限制的,所以,就出现了上述现象。实际上,这种问题不仅在Python中会遇到,在所有支持浮点数运算的编程语言中都会遇到,它不是Python的Bug。不过一般情况下,只要简单地将最终的显示结果“四舍五入”到所期望的十进制位数,就会得到满意的最终结果。

元素交换

Python支持下面这种直接解包赋值的操作

>>> x,y = 2,3
>>> print('x=',x,'y=',y)
x= 2 y= 3
>>> x,y = y,x
>>> print('x=',x,'y=',y)
x= 3 y= 2
>>> x,y = 2,3
>>> x,y = y+2,x-1
>>> print(x,y)

注意,上面的表达式,会不会是y+2先赋值给a,然后a-1再赋值给b呢?答案肯定是不会的,因为等号右边完成压包后,左侧才解包。所以上面的答案是a=5,y=1

进制转换

十进制转二进制

>>> bin(10)
'0b1010'

十进制转八进制

>>> oct(8)
'0o10'

十进制转十六进制

>>> hex(12)
'0xc'
类型转换

整数或数值型字符串转为浮点数。

>>> float(2)
2.0

当然,不是说有类型都能转化为浮点数,当不能转化时,则会报ValueError

>>> float('a')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: could not convert string to float: 'a'

转为整数型

int(x,[base])x可能为字符串或数值,将x按照base进制转换为整数,若base不写则默认为十进制。

>>> int('10',16)
16

>>> int('10',10)
10

>>> int('10',8)
8

>>> int('10',2)
2

常用数学函数
  • 分别取商和余数
    上面数值运算可以通过//%分别取得商和余数,下面可以使用函数直接获取商和余数。

    >>> divmod(10,3)
    (3, 1)
    
  • 幂运算

    >>> pow(2,3)
    8
    
  • 幂运算后再取余

    >>> pow(2,3,3)
    2
    
  • 四舍五入

    >>> round(1.23546)
    1
    >>> round(1.23456,2) #第二个参数表示要保留的小数位数
    1.23
    >>> round(1.23456,3)
    1.235
    
  • 计算表达式
    计算字符串表达式的值

    >>> a = "2 + 5 * 3"
    >>> eval(a)
    17
    
  • 返回最值

    >>> max(1,2)
    2
    >>> min(1,2)
    1
    
  • 返回绝对值

    >>> abs(-2)
    2
    
  • 返回平方根

    >>> import math
    >>> math.sqrt(4)
    2.0
    
判真假函数
  • bool函数

    >>> bool(0)
    False
    >>> bool(False)
    False
    >>> bool(None)
    False
    >>> bool([])
    False
    
    >>> bool([False])
    True
    >>> bool([0,0])
    True
    
  • all函数判断元素是否都为真
    所有元素都为真返回True,否则返回False

    >>> all([1,0,3,5])
    False
    >>> all([1,2,3,5])
    True
    
  • any函数判断是否至少有一个元素为真
    至少有一个元素为真返回True,否则返回False

    >>> any([0,False,[]])
    False
    
    >>> any([0,False,True,[]])
    True
    

链式比较
Python支持的一种链式比较

>>> 1 < i < 2
False
>>> 1 < i <= 2
True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值