资讯专栏INFORMATION COLUMN

Python基础之(一)基本数据类型

yagami / 1334人阅读

摘要:但是在转化中,浮点数转化为二进制后,不会精确等于十进制的。一般情况下,只要简单地将最终显示的结果用四舍五入到所期望的十进制位数,就会得到期望的最终结果。四舍五入内建函数。在中的第二个数,表示要保留的小数位数,返回值是一个四舍五入之后的数值。

数字 基本类型

首先,进入Python交互模式中:

//整数
>>> 3
3

//长整数
>>> 33333333333333333333333333
33333333333333333333333333L

//浮点数
>>> 3.22222222222
3.22222222222

//负数
>>> -234
-234

//十六进制数
>>> 0xff
255

//八进制
>>> 010
8

在交互模式下:

如果输入3,就显示3,称为整数

当输入一个比较大的整数时,Python会自动会将这个大整数进行转换,转换的结果是一个“长整数”类型,为了表示它,会在其末尾显示一个L。由于这个操作是Python自动完成的,所有在Python中没有多带带将“长整数”作为一个类型。

如果输入一个负数,直接在数字前面加上符号即可

Python也支持二进制、八进制、十六进制数。

对象身份

每个数字在Python都是一个对象,每个对象,在内存中都有自己的一个地址,这就是它的身份,用内建函数id()可以查看每个对象的内存地址即身份。

>>> id(3)
39679608
>>> id(-3)
39679680
>>> id(2.33)
39712264
>>> id(3.0)
48962672
>>> 

以上四个不同的数字是四个不同的对象,具有四个不同的内存地址。特别要注意,在数学上,3和3.0是相等的,但在这里,它们是不同的对象。

对象类型

如果要查找一个对象的类型,则使用type()这个内建函数。

>>> type(3)

>>> type(-3)

>>> type(0.3)

>>> type(222222222222222222222222222)
变量
>>> x = 5
>>> x
5
>>> x = 6
>>> x
6
>>> 

在Python中,对象有类型,变量无类型

当Python中写入5、6时,计算机就自动在其内存中某个地方建立了这两个对象,这两个对象的类型就是Int

上述代码中的x就好比是个标签,当x=5时,就是将x这个标签拴在了5上,通过这个x,就找到了5,于是“>>>x"输出的结果就是5。所以这个标签x没有类型之说,它不仅可以贴在整数类型的对象上,还可以贴在其他类型的对象上。

简单的四则运算
//加
>>> 3 + 5
8

//减
>>> 5 - 3
2

//乘
>>> 5 * 3
15

//整除
>>> 8 / 4
2

//模除
>>> 8 % 3
2

//混合运算
>>> 2 * 3 -4
2
整数溢出问题

在一些高级编程语言中,整数溢出是必须正视的,但是,在Python里就无需担心了,原因就是Python为我们解决了这个问题,它支持“无限精度”的整数,所以,不用考虑整数溢出的问题,Int类型与任意精度的Long整数类型可以无缝转换,超过Int范围情况都将自动转换成Long类型。

如下计算:

>>> 1234456678888914781548154815481 * 618468146815418458154815481548
763472134516343226654595368107241568115304361007546100244588L

你还可以在交互模式下计算2的1000次幂,计算方法是:

>>> 2 ** 1000
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376L
>>> 
除法 整数与整数相除
>>> 2 / 5
0
>>> 2.0 / 5
0.4
>>> 2 / 5.0
0.4
>>> 2.0 / 5.0
0.4

Python2.x中

整数除整数,商是整数

整数除浮点数或浮点数除整数,商是浮点数

整数与浮点数相除
>>> 9.0 / 2
4.5
>>> 9 / 2.0
4.5
>>> 9.0 / 2.0
4.5
>>> 

不管是除数或者被除数,只要有一个数是浮点数,结果就是浮点数。

然而,下面的计算可能会有点不好理解:

>>> 10.0 / 3
3.3333333333333335
>>> 0.1 + 0.2
0.30000000000000004
>>> 0.1 + 0.1 - 0.2
0.0
>>> 0.1 + 0.1 + 0.1 - 0.3
5.551115123125783e-17
>>> 0.1 + 0.1 + 0.1 - 0.2
0.10000000000000003
>>> 

原因在于十进制和二进制的转换上,计算机使用的是二进制进行计算,在上面的例子中,我们输入的是十进制,就要把十进制转换成二进制,然后在计算。但是在转化中,浮点数转化为二进制后,不会精确等于十进制的0.1。因为计算机存储的位数是有限制的,所有就出现了上述现象。

一般情况下,只要简单地将最终显示的结果用“四舍五入”到所期望的十进制位数,就会得到期望的最终结果。

对于需要非常精确的情况,可以使用decimal模块,它实现的十进制运算适合高精度要求的应用。另外fractions模块支持另外一种形式的运算,它实现的运算基于有理数。最高要求则是使用有SciPy提供的Numerical Python包和其他用于数学和统计学的包。

引用模块解决除法问题

我们可以通过以下两种形式引入模块:

形式1:import module-name。import后面跟空格,然后是模块名称,例如 import os

形式2:from module1 import module11。module1是一个大模块,里面还有子模块module11,只想用module11,就这么写。

如下是解决除法问题的模块:

>>> from __future__ import division
>>> 5 /2
2.5
>>> 9 / 2
4.5
>>> 9.0 / 2
4.5

引用了此模块后,不管什么情况,都能够得到浮点数的结果了。

余数

模除,用%符号来取得两个数相除的余数

>>> 5 % 2
1
>>> 9 % 4
1
>>> 

内建函数divmod()

>>> divmod(5,2)
(2, 1)
>>> divmod(9,4)
(2, 1)

内建函数divmod()返回的是两个值,这两个值在一个圆括号内,圆括号内的数字第一个表示商,第二个表示余数。

四舍五入

内建函数round()。

>>> round(1.234567,2)
1.23
>>> round(1.234567,3)
1.235
>>> round(10.0 /3 ,4)
3.3333
>>> 

在round()中的第二个数,表示要保留的小数位数,返回值是一个四舍五入之后的数值。

接下里看下面的特殊情况:

>>> round(0.12345,3)
0.123  #应该是1.235
>>> round(2.235,2)
2.23   #应该是2.24
>>> 

这不是Python地Bug,归根到底是浮点数中的十进制转化为二进制引起的问题

常用数学函数和运算优先级 math模块

math模块是Python标准库中的,所以不用安装就可以直接安装。使用方法是:

>>> import math

这样就将math模块引用进来了,下面就可以使用这个模块提供的工具了,比如要得到圆周率:

>>> import math
>>> math.pi
3.141592653589793
>>> 

这个模块都能做些什么事情呢?可以用下面的方法看到:

>>> dir(math)
["__doc__", "__name__", "__package__", "acos", "acosh", "asin", "asinh", "atan", "atan2", "atanh", "ceil", "copysign", "cos", "cosh", "degrees", "e", "erf", "erfc", "exp", "expm1", "fabs", "factorial", "floor", "fmod", "frexp", "fsum", "gamma", "hypot", "isinf", "isnan", "ldexp", "lgamma", "log", "log10", "log1p", "modf", "pi", "pow", "radians", "sin", "sinh", "sqrt", "tan", "tanh", "trunc"]
>>> 

dir(module)可以查看任何模块所包含的工具。
help(function)可以用来查看每个函数的使用情况。

>>> help(math.pow)
Help on built-in function pow in module math:

pow(...)
    pow(x, y)
    
    Return x**y (x to the power of y).

>>> 

下面来看看一些基本函数的使用:

#开平方
>>> math.sqrt(9)
3.0

#绝对值
>>> math.fabs(-2)
2.0

#模除
>>> math.fmod(5,3)
2.0
两个函数

1.求绝对值

>>> abs(10)
10
>>> abs(-10)
10
>>> abs(-1.2)
1.2

2.四舍五入

>>> round(1.234)
1.0
>>> round(1.234,2)
1.23
运算优先级

运算规则表:

运算符 描述
lamba Lamba表达式
or 布尔或
and 布尔与
not x 布尔非
in,not in 成员测试
is,is not 同一性测试
<,<=,>,>=,!=,== 比较
竖线 按位或
^ 按位异或
& 按位与
<<,>> 移位
+,- 加减 法
*,/,% 乘除、取余
+x,-x 正负号
~x 按位翻转
** 指数

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38182.html

相关文章

  • python基础教程:基本数据类型布尔类型(Boolean)

    摘要:另外还有一种数据类型叫做布尔类型。布尔类型布尔类型是计算机中最基本的类型,它是计算机二进制世界的体现,一切都是和。中的布尔类型只有两种值和。 计算机的本质就是计算,在其内部是0和1的比特位的变化,对外表现就是数据的变化。那么,计算机都能处理什么数据呢?本质上,数据都是以字节(Byte)存储的,表现上看,它们就是整数、浮点数和字符串等。Python的基本数据类型也不外乎于此。 整数和浮点...

    happyhuangjinjin 评论0 收藏0
  • Python基础输入、输出与高阶赋值

    摘要:基础之输入输出与高阶赋值学习目标输入输出与注释获取用户输入格式化输出基本方法格式化函数注释高阶赋值语句赋值运算符并行赋值序列解包链式赋值学习目标是简洁易学面向对象的编程语言。 ...

    Astrian 评论0 收藏0
  • Python爬虫学习路线

    摘要:以下这些项目,你拿来学习学习练练手。当你每个步骤都能做到很优秀的时候,你应该考虑如何组合这四个步骤,使你的爬虫达到效率最高,也就是所谓的爬虫策略问题,爬虫策略学习不是一朝一夕的事情,建议多看看一些比较优秀的爬虫的设计方案,比如说。 (一)如何学习Python 学习Python大致可以分为以下几个阶段: 1.刚上手的时候肯定是先过一遍Python最基本的知识,比如说:变量、数据结构、语法...

    liaoyg8023 评论0 收藏0
  • Python基础(三)字典

    摘要:这种数据结构包含以下几种常见的操作向关联数组添加键值对从关联数组内删除键值对修改关联数组内的键值对根据已知的键寻找值字典问题是设计一种能够具备关联数组特性的数据结构。 定义 Python中有一个叫作dictionary的对象类型,翻译过来就是字典,用dict表示。 创建字典 创建空的字典 >>> mydict = {} >>> mydict {} >>> type(mydict) >...

    snifes 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<