详解Python中的各种数字类型

(1) 内置的整数、实数与复数

在使用中,不必担心数值的大小问题,Python支持任意大的数字,具体可以大到什么程度仅受内存大小的限制。由于精度的问题,对于实数运算可能会有一定的误差,应尽量避免在实数之间直接进行相等性测试,而是应该以二者之差的绝对值是否足够小作为两个实数是否相等的依据。在数字的算术运算表达式求值时会进行隐式的类型转换,如果存在复数则都变成复数,如果没有复数但是有实数就都变成实数,如果都是整数则不进行类型转换。

>>> 9999 ** 99 #这里**是幂乘运算符,等价于内置函数pow()

990148353526723487602263124753282625570559528895791057324326529121794837894053513464422176826916433932586924386677766244032001623756821400432975051208820204980098735552703841362304669970510691243800218202840374329378800694920309791954185117798434329591212159106298699938669908067573374724331208942425544893910910073205049031656789220889560732962926226305865706593594917896276756396848514900989999

>>> 0.3 + 0.2 #实数相加

0.5

>>> 0.4 - 0.1 #实数相减,结果稍微有点偏差

0.30000000000000004

>>> 0.4 - 0.1 == 0.3 #应尽量避免直接比较两个实数是否相等

False

>>> abs(0.4-0.1 - 0.3) < 1e-6 #这里1e-6表示10的-6次方

True

Python内置支持复数类型及其运算,并且形式与数学上的复数完全一致。例如:

>>> x = 3 + 4j #使用j或J表示复数虚部

>>> y = 5 + 6j

>>> x + y #支持复数之间的加、减、乘、除以及幂乘等运算

(8+10j)

>>> x * y

(-9+38j)

>>> abs(x) #内置函数abs()可用来计算复数的模

5.0

>>> x.imag #虚部

4.0

>>> x.real #实部

3.0

>>> x.conjugate() #共轭复数

(3-4j)

Python 3.6.x开始支持在数字中间位置使用单个下划线作为分隔来提高数字的可读性,类似于数学上使用逗号作为千位分隔符。在Python数字中单个下划线可以出现在中间任意位置,但不能出现开头和结尾位置,也不能使用多个连续的下划线。

>>> 1_000_000

1000000

>>> 1_2_3_4

1234

>>> 1_2 + 3_4j

(12+34j)

>>> 1_2.3_45

12.345

(2)分数

Python标准库fractions中的Fraction对象支持分数运算,还提供了用于计算最大公约数的gcd()函数和高精度实数Decimal,这里重点介绍Fraction对象。

>>> from fractions import Fraction

>>> x = Fraction(3, 5) #创建分数对象

>>> y = Fraction(3, 7)

>>> x

Fraction(3, 5)

>>> x ** 2 #幂运算

Fraction(9, 25)

>>> x.numerator #查看分子

3

>>> x.denominator #查看分母

5

>>> x + y #分数之间的四则运算,自动进行通分

Fraction(36, 35)

>>> x * y

Fraction(9, 35)

>>> x / y

Fraction(7, 5)

>>> x - y

Fraction(6, 35)

>>> x * 2 #分数与数字之间的运算

Fraction(6, 5)

>>> Fraction(3.5) #把实数转换为分数

Fraction(7, 2)

(3)高精度实数

标准库fractions和decimal中提供的Decimal类实现了更高精度的运算。

>>> from fractions import Decimal

>>> 1 / 9 #内置的实数类型

0.1111111111111111

>>> Decimal(1/9) #高精度实数

Decimal('0.111111111111111104943205418749130330979824066162109375')

>>> 1 / 3

0.3333333333333333

>>> Decimal(1/3)

Decimal('0.333333333333333314829616256247390992939472198486328125')

>>> Decimal(1/9) + Decimal(1/3)

Decimal('0.4444444444444444197728216750')

本文分享自微信公众号 - Python小屋(Python_xiaowu)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-02-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器学习算法与理论

从python2到python3

从Python2到Python3需要进行一定的转换,我们知道python版本更新后部分数据结构和语法有了少许的差别,这里简单列出几个,后续会进行更新: 1、pr...

37280
来自专栏抠抠空间

re模块(正则表达式)

一、什么是正则表达式 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一类事物的规则。(在Pyt...

33660
来自专栏计算机视觉

stackGan实验

你得把该下载的下载好,StackGan-master 然后unzip StackGAN-master.zip 里面有一个文件夹是Data,在这个文件里下载文...

32560
来自专栏深度学习自然语言处理

为什么要使用向量化?

简单的矩阵乘法理论 其实大概每个人都知道向量化后进行计算的速度比循环求解计算快,可是快多少,我们还是不太清楚。那么我就想简单的说下理论再上代码(pyth...

33260
来自专栏计算机视觉

为stackGan一个工程创建一个虚拟环境,python 2.7 tensorflow0.12-tensorflow 1.01

安装conda 下载地址:https://repo.continuum.io/miniconda/Miniconda2-latest-Linux-x86_64...

393100
来自专栏计算机视觉

Python 函数使用记录,join函数和os.path.join用法

1.join()函数 语法:‘sep’.join(seq) 参数说明: sep:分隔符。可以为空 seq:要连接的元素序列、字符串、元组、字典等 上面的语法即:...

491120
来自专栏深度学习自然语言处理

简单maxPooling单层网络句子分类框架和数学理论

为了完成我的基于深度学习的立场检测系统毕业论文,我会从最简单的Pooling单层网络开始系统学习句子分类。接下来会有卷积神经网络CNN层,循环神经网络R...

353110
来自专栏计算机视觉

Python 函数使用记录,join函数和os.path.join用法

1.join()函数 语法:‘sep’.join(seq) 参数说明: sep:分隔符。可以为空 seq:要连接的元素序列、字符串、元组、字典等 上面的语法即:...

31070
来自专栏鹅厂优文

Python 工匠:善用变量来改善代码质量

我一直觉得编程某种意义上是一门『手艺』,因为优雅而高效的代码,就如同完美的手工艺品一样让人赏心悦目。

1K100
来自专栏超智能体

YJango:TensorFlow中层API Datasets+TFRecord的数据导入

2. 对接性:TensorFlow中也加入了高级API (Estimator、Experiment,Dataset)帮助建立网络,和Keras等库不一样的是:这...

1.2K230

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励