bool类型_Python基本数据类型之Number

Number(数)

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

Python中的数有四种类型:

  • int(整数)— 通常被称为整型或整数,是正或负整数,不带小数点。Python3中,只有一种整数类型int,表示为长整型,所以在Python3中不需要考虑整型是否会溢出的问题。

  • bool(布尔)— 布尔值使用常量TrueFalse表示。

  • float(浮点数)— 浮点型由整数部分与小数部分组成,浮点也可以使用科学计数法表示eb606c736ef32c441e1bdbea877db62c.png

  • 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 "", line 1, in 
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 2
False
>>> 1 2
True
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值