Python学习手册笔记(五)Python的数字类型
1Python的数字类型
在Python中,数字并不是一个真正的对象类型,而是一组类似类型的分类。Python不仅支持通常的数字类型(整数和浮点数),而且能够通过常量来直接创建数字以及处理数字的表达式。此外,Python为更高级的工作提供了很多高级数字编程支持和对象。
Python数字类型的完整工具包括:
l整数和浮点数
l复数
l固定精度的十进制数
l有理分数
l集合
l布尔类型
l无穷的整数精度
l各种数字内置函数和模块
1.1数字常量
在基本类型中,Python提供了:整数(正整数和负整数)和浮点数(带有小数部分的数字)。Python还允许我们使用十六进制、八进制和二进制常量来表示整数,提供一个复数类型,并且允许整数具有无穷的精度(只要内存空间允许,它可以增长成任意位数的数字。)
数字与常量类型
整数和浮点数常量
整数以十进制数字的字符串写法出现。浮点数带一个小数点,也可以加上科学计数标志e或者E。如果编写一个带有小数点或幂的数字,Python会将它变成一个浮点数的对象,并且在这个对象用在表达式时,将启用浮点数的运输发展。浮点数就像C语言中的“双精度”一样实现,因此,其精度与用来构建Python解释器的C编译器所给定的双精度一样
Python3.0中的整数:一个单独的类型
在Python3.0中,一般整数和长整数已经合二为一,只有整数一种,自动支持Python2.6的单独的长整数类型所拥有的无穷精度。因此,整数在程序中不再用末尾的l或L表示,并且整数也不再会显示出这个字符。
十六进制数、八进制和二进制常量
十六进制一ox或0X开头,后面接十六进制的数字0~9和A~F。十六进制的数字编写成大写或小写都可以。八进制常量以数字0o或0O开头(0和小写或大写的字母“o”),后面接着数字0~7构成的字符串。二进制常量用0b或0B开头,后面跟着二进制数字(0、1)
注意所有这些常量在程序代码中都产生一个整数对象,它们仅仅是特定值的不同预防表示而已。内置函数hex(I)、oct(I)和bin(I)把一个整数转换为这3中进制表示的字符串,并且int(str,
base)根据每个给定的进制把一个运行时字符串转换为一个整数。
复数
Python的复数常量写成实部+虚部的写法,这里的虚部以j或J结尾。其中,实部从技术上讲可有可无。从内部看来,复数都是通过一对浮点数来表示的,但是对复数的所有数字操作都会按照复数的运算法则进行。也可以通过内置函数complex(real,
imag)来创建复数。
别写其他的数字类型
其他的、更高级的数字类型,可以通过调用导入的模块中的函数来创建(例如十进制数和分数),其他的拥有一些它们自己的常量语法(例如集合)
1.2内置数学工具和扩展
表达式操作符
+、-、*、/、>>、**、&等
内置数学函数
pow、abs、round、int、hex、bin等
公用模块
random、math等
数字主要通过表达式、内置函数和模块处理,它们如今也拥有很多特定于类型的方法。例如浮点数拥有一个as_interger_ratio方法,还有一个is_integer测试数字是否是一个整数。
1.3Python表达式操作符
在Python中,表达式是使用通常的数学符号和操作符好写出来的。
操作符号与比较符
比较操作符可以连续使用:x
分片表达式x[I:J:K]等同于用一个分片对象所以:X[slice(I,J,K)]
Python3.0中,X/Y表达式执行真正的除法,X//Y是floor除法(把余数小数部分去掉)
1.3.1混合操作所遵循的操作符优先级
在上表中的操作符,越靠后优先级越高。同一行的通常是从左到右。
1.3.2括号分组的子表达式
利用括号分组可以超越Python的优先级规则。在一个大型表达式中增加括号是很好的方法,不仅强制按照你想要的顺序进行计算,同时也增加了程序可读性。
1.3.3混合类型自动升级
在混合类型的表达式中,Python首先将被操作的对象转换成其中最复杂的操作对象的类型,然后再对相同类型的操作对象进行数学运算。这个行为和C语言中的类型转换很相似。
可以通过手动调用内置函数来转换类型:
>>>
int(3.1415) # Truncates float tointeger
3
>>>
float(3) # Converts integer to float
3.0
但通常没有必要这样做,因为Python在表达式中自动升级为更复杂的类型。再者,要记住所有这些混合类型转换仅仅在将数字类型(例如一个整数和一个浮点数)混合到一个表达式中的时候才使用,这包括那些使用数字和比较操作符的表达式。一般来说,Python不会在其他的类型之间进行转换,例如一个字符串和一个整数相加会产生错误,除非手动转换其中某个的类型。
1.3.4预习:运算符重载
要留心虽有的Python操作符可以通过Python的类或C扩展类型被重载(即实现),让它也能工作与你所创建的对象中。例如,用类编写的对象代码也许可以是是使用+表达式做加法或连接,以及是使用[i]表达式进行索引等。
这种特性通常称为多态。这个术语指操作的意义取决于所操作的对象的类型。
2在实际应用中的数字
2.1数字常量
在Python中:
l变量在它第一次赋值时创建
l变量在表达式中使用将被替换为它们的值
l变量在表达式使用以前必须已赋值
l变量像对象一样不需要在一开始进行声明
% python
>>>
a = 3 # Name created
>>>
b = 4
一旦用在某个表达式中,这里的变量会被它们的值替换,当在交互模式下工作时,表达式的结果将马上显示出来
>>>
a + 1, a – 1
#Addition(3+1),subtraction(3-1)
(4,2)
从技术上讲,这里的回显所得到的结果是有两个值的元组,因为输入在提示符的那行包含了两个被逗号分开的表达式。这也就是现实的结果包含在括号里的原因。如果使用一个从未被赋值的不同的变量,Python将会报告错误。
在Python中,变量不需要预声明,但是在使用前至少要赋一次值。事实上,这意味着在对其进行加法运算时要计数器初始化为0,在列表后添加元素前,要首先初始化列表为一个空列表。
2.2数字显示的格式
有些版本,不实用打印语句可能会出现奇怪的结果,其原因是浮点数的硬件限制,以及它无法精确地表现一些值。实际上,这真的知识一个显示问题——交互模式下结果的自动回显会比打印语句显示更多的数字位数。
除了打印和自动回显之外,还有多种方法显示计算机中的数字的位数:
>>>
num = 1/3.0
>>>
num # Echoes
0.333333333333331
>>>
print(num) # print rounds
0.333333333333333
>>>
‘%e’ % num # String formatting expre_ssion
‘3.33333e-001’
>>>
‘%4.2f’ % num # Alternativefloating-point
format
‘0.33’
>>>
‘{0:4.2f}’.format(num) # Stringformatting
method
‘0.33’
这些方法中的最后三个使用了字符串格式化,这是灵活地进行格式化的工具,将在以后关于字符串的章节中进行介绍。其结果通过打印来显示或报告字符串。
2.3比较:一般的和连续的
数字可以进行比较相对大小,并且返回一个布尔类型的结果:
>>>
1 < 2 # Less than
True
>>>
str和repr显示格式:从技术上说,默认的交互模式回显和打印的区别就相当于内置repr和str函数的区别:
>>>
num = 1/3
>>>
repr(num) # Used by echoes:as-codeform
‘0.33333333333331’
>>>
str(num) # Used by print:user-friendlyform
‘0.33333333333’
Python还允许多个比较连续起来进行范围测试
例如(A)测试B是否在A和C之间,等同于测试(A),但更容易辨识和录入。
2.4传统除法、Floor除法和真除法
X / Y
传统除法和真除法。Python2.6以前的版