数字类型基础——数字字面量

未匹配的标注

在Python的基本类型中,它提供了整数,它们是正负整数,还有浮点数,它们是带小数部分的数(有时简称为“floats”)。Python还允许用十六进制、八进制和二进制字面量来表示整数;还提供了复数类型;还允许整数拥有无限精度——只要内存空间允许,就可以增长到尽可能多的位数。表5-1显示了Python的数字类型在程序中作为字面量或构造器函数调用时的写出来的样子。

image-20230215175228719

通常,Python的数字类型字面量写起来是很简单的,但有几个编程概念值得在这里强调:

整数和浮点字面量

整数被写作十进制数字的字符串。浮点数有一个小数点和/或一个可选的有正/负符号的指数,该指数前面是一个eE跟着一个可选的正/负符号。如果写一个带小数点或指数的数字,当这个对象用在表达式中时,Python会让它成为一个浮点对象并使用浮点(非整数)数学。在标准CPython中,浮点数被实现为C的“doubles”类型,并因此获得了C编译器(用来构建Python解释器)给到doubles类型的那么高的精度。

Python 2系列中的整数:普通整数和长整数

在Python 2系列中有两个整数类型,普通整数(通常是32位)和长整数(无限制精度),而且一个整数可能以一个lL结尾来强制它成为长整数。因为当整数的值在溢出分配位数时会被自动转为长整数,所以永远不需要亲自输入字母L——当需要额外精度时,Python自动将其转为长整数。

Python 3系列中的整数:唯一的类型

在Python 3系列中,普通整数和长整数合并了——只有整数,它自动支持Python 2系列中独立长整数的无限精度。因此,整数不再以一个结尾的lL来编码,且整数也永远不会用这个字符来打印。除此之外,大多数程序并不会被这个改变影响,除非它们确实进行了类型测试来检查2系列中的长整数。

十六进制、八进制和二进制字面量

整数可以用十进制(以10为基数)、十六进制(以16为基数)、八进制(以8为基数)或二进制(以2为基数),最后三个在某些编程领域中很常见。十六进制数在最前面有一个前导的0x或0X,接着是一个十六进制数字(0-9和A-F)的字符串。十六进制数字可用小写或大写字母编码。八进制字面量是以一个前导0o或0O(零和小写或大写字母O)开始,跟着一个数字(0-7)字符串。在2系列中,八进制字面量还可以只用一个前导0来编码,但在3系列中不行——这种原始的八进制形式很容易和十进制混淆,因此被新的0o格式(还可以用于从2.6开始的2系列中)所代替。在从2.6和3.0开始的新版本中,二进制字面量是以一个前导的0b或0B开头,跟着二进制数字(0-1)。

注意所有这些字面量都会生成编码中的整数对象;它们仅仅是指定值的可选语法。内置调用 hex(I), oct(I)bin(I)将整数转换为这三种基数的字符串表示形式,而 int(str,base)将运行时字符串转换为指定基数的整数。

复数

Python复数字面量被写作 实部+虚部虚部jJ结尾。技术上实部是可选的,所以虚部可能单独出现。虽然复数在内部被实现为浮点数对,但当数字运算应用到复数时,都执行复数运算(译注:实部与虚部分开计算)。复数还可以用 complex(real, imag)这个内置调用来创建。

对其他数字类型进行编码

本章后面将看到:在表5-1末尾的额外数字类型有更高级或专业的用途。通过调用导入模块中的函数来创建某些数字类型(比如高进度十进制数和分数),其它的有自己的字面量语法(如 sets)。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~