数字的使用

原载于

https://mp.weixin.qq.com/s/z3lB89vpM16o7E8QGp4NHg

前段时间因为需要用到python抓取数据,做一些简单的数据分析的工作,所以把python完整学习一遍。期间碰到不少问题,到网上查找答案的时候,经常碰到语焉不详避重就轻的答案。有时候网上一些解决问题的思路有点绕,为何那样做,原因并没有介绍,让人心生疑惑。迫不得已把python的官方文档通篇阅读了一遍,大致把基本语法和python解决一些问题的思路给捋清楚了。一些有疑惑的部分,还查看了相关的PEP文档,了解当时构建它的人是何种考虑。相关的知识点比如说字符编码、http协议等等还找了别的辅助资料来看。这样看看资料,敲敲测试代码,写写笔记,想不到居然花了近100个小时。趁现在的理解还是比较系统的,把这些所阅所得给整理一下,记录下来。以后即使长时间不用了,看看自己做的整理,希望也能够在短时间内捡起来。

这套整理是基于python2.7的。python3.X的知识点和2.7的基本是一致,只是很多时候类型换了个名字,库也换了位置,一些用起来拗手的方法被精简掉了。解决问题的思路并没有大的不同,了解了背后的机制,很快也能够自由切换了。

现在就开始我的整理。


1. 数字的使用

python有三种数字类型:整型,浮点型和复数。一般在代码中使用的也就是整形和浮点型,复数极少涉及。


1.1 数字类型的构造

python并没有类型声明这一说,上来就可以直接用“=”进行赋值操作。

把整型数字赋值给一个变量,这个变量就是整型的。

>>> a=456
>>> print(a)
456


而把浮点型数字赋值给一个变量,这个变量就是浮点型。

>>> b=2.7
>>> print(b)
2.7


想要把复数型的数字赋值给一个变量,这个变量就是复数型的。

>>> c=1+2j
>>> c
(1+2j)


通过int()方法,可以把一个数字或者非数字强制转化为整型。

如果这个数字是一个浮点型的,那么转化了之后小数点后面的部分丢失。

>>> int(2.3)
2

但是无法把复数类型的转化为整数,会出现TypeError错误。

>>> int((1+2j))
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: can't convert complex to int

如果字符串是纯数字,也可以强制转为整型。

>>> int("1")
1

但是如果字符串里面含有非数字字符,那么转化就会失败。

>>> int('3.45')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '3.45'


同样的,也可以试试看通过float()把其它类型的值强制转化成一个浮点型。

然后,再试试看通过complex()把其它类型的值强制转化为一个复数。


1.2 整型的范围

计算机用二进制来表示数据,因为二进制的位数都是有限的,因此都要考虑范围问题。在python2.7中,整型分成了int型和long型。int型表示的数值范围较小,而long型则可以表示无限的数值范围。

int能够表示的数值的范围取决于本机的cpu是32位还是64位的。如果是32位的,那么除掉一位用来表示符号,31位可以表示数值。如果是64位的,除掉一位用来表示符号,63位可以用来表示数值。

python2.7提供了可以查看数值范围的方式。方法是:导入sys模块,然后查看sys模块的maxint成员变量,代码如下。什么是模块,这个内容在后面介绍。

>>> import sys
>>> print(sys.maxint)
9223372036854775807

在我的64位机器上,可以看到这是一个很大的数值。

一般情况下,这个数值范围也足够使用了。万一产生了大于这个数值的数字,实际上也不需要担心,因为python2.7会自动转换为long型的数字。从下面的代码中就可以看到,当一个maxint的数值+1后,就自动产生了一个long型的数。

>>> a=9223372036854775807
>>> a
9223372036854775807
>>> b=a+1
>>> b
9223372036854775808L

所以使用python是基本不需要担心溢出问题的。


1.3 支持的运算

Python的这几种数字类型都支持基本的数字运算。

比如说相加

>>> 4+5.6
9.6

比如说相减

>>> 3-7
-4

比如说相乘

>>> 4*(4+7j)
(16+28j)

比如说相除

>>> 4/2.5
1.6

比如说取绝对值

>>> abs(-4)
4

比如说幂运算

>>> pow(2,3)
8

比如说取余

>>> 5%2
1

比如说取模

>>> 5//2
2

加、减、乘、除、取绝对值、幂运算、取余、取模。这八类运算涵盖了实际运用中大多数的数值运算了。


有一点需要注意的是,两个整型的除法运算,会返回向下取整的整型

>>> 1/2
0

所以要得到一个更精确的数值,做除法的时候最好把除数和被除数都变成浮点型。不然会产生很大的误差。

>>> float(1)/float(2)
0.5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值