Python入门篇之数字

本文详细介绍了Python中的数值类型,包括整型(标准整数和长整数)、浮点数以及复数。Python的整数类型在2.2以后不再溢出,而是自动转换为长整型。浮点数遵循IEEE754标准,而复数由实部和虚部组成,支持复数运算。此外,文章还讨论了不同数字类型间的转换和运算规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数字类型

数字提供了标量贮存和直接访问。它是不可更改类型,也就是说变更数字的值会生成新的对象。当然,这个过程无论对程序员还是对用户都是透明的,并不会影响软件的开发方式。 Python 支持多种数字类型:整型、长整型、布尔型、双精度浮点型、十进制浮点型和复数。 创建数值对象并用其赋值 (数字对象) 创建数值对象和给变量赋值一样同样简单:

复制代码 代码如下:

anInt=1 along=-555555555555L afloat=3.141595468565 acomplex=1.334+4.5433j

更新数字对象

通过给数字对象(重新)赋值, 您可以“更新”一个数值对象。我们之所以给更新这两个字加上引号,是因为实际上你并没有更新该对象的原始数值。这是因为数值对象是不可改变对象。Python 的对象模型与常规对象模型有些不同。你所认为的更新实际上是生成了一个新的数值对象,并得到它的引用。 在学习编程的过程中, 我们一直接受这样的教育,变量就像一个盒子, 里面装着变量的值。在Python中,变量更像一个指针指向装变量值的盒子。对不可改变类型来说,你无法改变盒子的内容,但你可以将指针指向一个新盒子。每次将另外的数字赋给变量的时候,实际上创建了一个新的对象并把它赋给变量.(不仅仅是数字,对于所有的不可变类型,都是这么回事)

复制代码 代码如下:

anInt += 1 aFloat = 2.718281828

通过下面的代码测试:

复制代码 代码如下:

anInt=1 id(anInt) 10416152 anInt+=1 id(anInt) 10416140

如何删除数字对象

按照Python的法则,你无法真正删除一个数值对象,你仅仅是不再使用它而已。如果你实际上想删除一个数值对象的引用,使用del语句。删除对象的引用之后,你就不能再使用这个引用(变量名), 除非你给它赋一个新值。如果试图使用一个已经被删除的对象引用,会引发 NameError 异常。

复制代码 代码如下:

del anInt del aLong, aFloat, aComplex

Python的四种主要数字类型

1.整型

Python 有几种整数类型。布尔类型是只有两个值的整型。常规整型是绝大多数现代系统都能识别的整型。Python 也有长整数类型。然而,它表示的数值大小远超过C 语言的长整数。下面我们先来了解一下这些类型,然后再来研究那些用于Python整数类型的运算符和内建函数。

1.1 布尔型

Python 从版本 2.3 开始支持布尔类型。该类型的取值范围只有两个值,也就是布尔值 True和布尔值 False。

1.2 标准整数类型

Python 的标准整数类型是最通用的数字类型。在大多数32位机器上,标准整数类型的取值范围是-231到231-1,也就是-2,147,483,648到2,147,483,647。如果在64位机器上使用64位编译器编译Python,那么在这个系统上的整数将是 64 位。下面是一些 Python 标准整数类型对象的例子: 0101 84 -237 0x80 017 -680 -0X92 Python标准整数类型等价于C的(有符号)长整型。整数一般以十进制表示,但是 Python也支持八进制或十六进制来表示整数。如果八进制整数以数字“0”开始, 十六进制整数则以“0x”或“0X”开始。

1.3 长整型

关于Python长整数类型我们必须要提的是,请不要将它和C或其它编译型语言的长整数类型混淆。那些语言的长整数典型的取值范围是32位或64位。Python的长整数类型能表达的数值仅仅与你的机器支持的(虚拟)内存大小有关,换句话说,Python 能轻松表达很大很大很大的整数。长整数类型是标准整数类型的超集,当你的程序需要使用比标准整数类型更大的整数时,长整数类型就有用武之地了。在一个整数值后面加个 L(大写或小写都可以),表示这个整数是长整数。这个整数可以是十进制,八进制,或十六进制。下面是一些长整数的例子:

复制代码 代码如下:

16384L -0x4E8L 017L -2147483648l 052144364L 299792458l 0xDECADEDEADBEEFBADFEEDDEAL -5432101234L Edit By Vheavens Edit By Vheavens

核心风格:用大写字母 “L”表示长整数,目前整型和长整型正在逐渐缓慢的统一,您只有在对长整数调用repr()函数时才有机会看到“L”,如果对长整数对象调用 str()函数就看不到 L。举例如下:

复制代码 代码如下:

aLong = 999999999l aLong 999999999L print aLong 999999999

1.4 整型和长整型的统一

这两种整数类型正在逐渐统一为一种。在 Python 2.2 以前,标准整数类型对象超出取值范围会溢出(比如上面提到的大于 232 的数),但是从 Python2.2 以后就再也没有这样的错误了。

复制代码 代码如下:

9999 ** 8 Traceback (most recent call last): File "<stdin>", line 1, in ? OverflowError: integer exponentiation Python 2.2 9999 ** 8 99920027994400699944002799920001L

双精度浮点数

Python中的浮点数类似C语言中的double类型,是双精度浮点数,可以用直接的十进制或科学计数法表示。每个浮点数占8个字节(64比特),完全遵守IEEE754号规范(52M/11E/1S),其中52个比特用于表示底,11个比特用于表示指数(可表示的范围大约是正负 10 的 308.25次方),剩下的一个比特表示符号。这看上去相当完美,然而,实际精度依赖于机器架构和创建 Python 解释器的编译器。浮点数值通常都有一个小数点和一个可选的后缀e(大写或小写,表示科学计数法)。在e和指数之间可以用正(+)或负(-)表示指数的正负(正数的话可以省略符号)。下面是一些典型的浮点数值的例子:

复制代码 代码如下:

0.0 -777. 1.6 -5.555567119 96e3 * 1.0 4.3e25 9.384e-23 -2.172818 float(12) 1.000000001 3.1416 4.2E-10 -90. 6.022e23 -1.609E-19

复数
一个实数和一个虚数的组合构成一个复数。一个复数是一对有序浮点数(x, y)。表示为x + yj,其中x是实数部分,y是虚数部分。渐渐的复数在日常运算,机械,电子等行业获得了广泛的应用。由于一些研究人员不断的重复制造用于复数运算的工具,在很久以前的Python1.4 版本里,复数终于成为一个真正的Python 数据类型。 下面是 Python 语言中有关复数的几个概念:

虚数不能单独存在,它们总是和一个值为 0.0 的实数部分一起来构成一个复数。

复数由实数部分和虚数部分构成

表示虚数的语法: real+imagj

实数部分和虚数部分都是浮点数

虚数部分必须有后缀j或J。

1.复数的内建属性 复数对象拥有数据属性,分别为该复数的实部和虚部。复数还拥有conjugate 方法,调用它可以返回该复数的共轭复数对象。

复数属性

属性 描述 num.real 该复数的实部 num num.imag 该复数的虚部 num.conjugate() 返回该复数的共轭复数

复制代码 代码如下:

c=2.3+2.5j c.real 2.3 c.imag 2.5 c.conjugate() (2.3-2.5j)

运算符

数值类型可进行多种运算。从标准运算符到数值运算符,甚至还有专门的整数运算符。

5.5.1 混合模式运算符

Python支持不同的数字类型相加。当一个整数和一个浮点数相加时, 系统会决定使用整数加法还是浮点数加法(实际上并不存在混合运算)。Python使用数字类型强制转换的方法来解决数字类型不一致的问题,也就是说它会强制将一个操作数转换为同另一个操作数相同的数据类型。这种操作不是随意进行的, 它遵循以下基本规则:

首先,如果两个操作数都是同一种数据类型,没有必要进行类型转换。仅当两个操作数类型不一致时, Python才会去检查一个操作数是否可以转换为另一类型的操作数。如果可以,转换它并返回转换结果。

由于某些转换是不可能的,比如果将一个复数转换为非复数类型,将一个浮点数转换为整数等等,因此转换过程必须遵守几个规则。要将一个整数转换为浮点数,只要在整数后面加个.0就可以了。要将一个非复数转换为复数,则只需要要加上一个 “0j”的虚数部分。

这些类型转换的基本原则是: 整数转换为浮点数,非复数转换为复数。在 Python 语言参考中这样描述coerce()方法: 如果有一个操作数是复数, 另一个操作数被转换为复数。 否则,如果有一个操作数是浮点数, 另一个操作数被转换为浮点数。 否则, 如果有一个操作数是长整数,则另一个操作数被转换为长整数; 否则,两者必然都是普通整数,无须类型转换。 数字类型之间的转换是自动进行的,程序员无须自己编码处理类型转换。Python 提供了 coerce() 内建函数来帮助你实现这种转换。

参见下面的流程图阐释了强制转换的规则:

算术运算符

Python 支持单目运算符正号(+)和负号(-), 双目运算符, +,-,*,/,%,还有 ** ,分别表示加法,减法,乘法,除法,取余,和幂运算。从 Python2.2 起,还增加了一种新的整除运算符//。

传统除法 如果是整数除法, 传统除法会舍去小数部分,返回一个整数(地板除)。如果操作数之一是浮点数,则执行真正的除法。包括 Python 语言在内的很多语言都是这种行为。看下面的例子:

复制代码 代码如下:

1 / 2 # perform integer result (floor) # 地板除 0 1.0 / 2.0 # returns actual quotient#真正除法 0.5

真正的除法

除法运算总是返回真实的商,不管操作数是整数还是浮点数。在未来版本的 Python中,这将是除法运算的标准行为。现阶段通过执行from future import division指令,也可以做到这一点。

复制代码 代码如下:

from future import division

1 / 2 # returns real quotient 0.5 1.0 / 2.0 # returns real quotient 0.5

地板除

从Python 2.2开始,一个新的运算符//已经被增加进来,以执行地板除:// 除法不管操作数何种数值类型,总是舍去小数部分,返回数字序列中比真正的商小的最接近的数字。

复制代码 代码如下:

1 // 2 # floors result, returns integer # 地板除, 返回整数 0 1.0 // 2.0 # floors result, returns float # 地板除, 返回浮点数 0.0

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值