《Python 3程序开发指南(第2版•修订版)》——2.2 Integral类型

2.2 Integral类型

Python提供了两种内置的Integral类型,即int与bool1。整数与布尔型值都是固定的,但由于Python提供了增强的赋值操作符,使得这一约束极少导致实际问题。在布尔表达式中,0与False表示False,其他任意整数与true都表示true。在数字表达式中,True表示1,False表示0。这意味着,有些看起来很怪异的表达式也是有效的。例如,我们可以使用表达式i += True来对整型变量i进行递增操作,当然,最自然的方法还是i+=1。

2.2.1 整数

整数的大小只受限于机器的内存大小,因此,包含几百个数字的整数可以很容易地创建与操纵——尽管在速度上会比处理那些可以由处理器自然表示的整数要慢。

默认情况下,整数literals采用的是十进制,但在方便的时候也可以使用其他进制:

>>> 14600926                       # decimal
14600926
>>> 0b110111101100101011011110     # binary
14600926
>>> 0o67545336                     # octal
14600926
>>> 0xDECADE                       # hexadecimal
14600926

二进制数以0b引导,八进制数以0o引导2,十六进制数则以0x引导,大写字母也可以使用。

所有常见的数学函数与操作符都可用于整数,如表2-2所示。有些功能由内置函数提供,比如abs()函数,abs(i)可以返回整数i的绝对值;有些功能由int操作符提供,比如,i+j返回整数i与整数j的和。

所有二元数学操作符(+、-、/、//、%与)都有相应的增强版赋值操作符(+=、-=、/=、//=、%=与=),这里,x op= y在运算逻辑上与x = x op y是等价的(这里的等价是指通常的情况,即读取x的值没有副作用。)

对象的创建可以通过给变量赋字面意义上的值,比如x=17,或者将相关的数据类型作为函数进行调用,比如x=int(17)。有些对象(比如,类型为decimal.Decimal)只能通过数据类型创建,这是因为这些对象不能用字面意义表示。使用数据类型创建对象时,有3种用例。

第一种情况是,不使用参数调用数据类型函数,这种情况下,对象会被赋值为一个默认值,比如,x=int()会创建一个值为0的整数。所有内置的数据类型都可以作为函数并不带任何参数进行调用。

第二种情况是,使用一个参数调用数据类型函数。如果给定的参数是同样的数据类型,就将创建一个新对象,新对象是原始对象的一个浅拷贝。(浅拷贝在第3章介绍。)如果给定的参数不是同样的数据类型,就会尝试进行转换。表2-3展示了int类型时的这种用法。如果给定参数支持到给定数据类型的转换,但是转换失败,就会产生一个ValueError异常,否则返回给定类型的对象。如果给定参数不知道到给定数据类型的转换,就会产生一个TypeError异常。内置的float与str类型都支持到整数的转换,第6章中我们将看到,将自定义类型转换为整数或其他类型也是可能的。

第三种情况是,给定两个或多个参数——但不是所有数据类型都支持,而对支持这一情况的数据类型,参数类型以及内涵都是变化的。对于int类型,允许给定两个参数,其中第一个参数是一个表示整数的字符串,第二个参数则是字符串表示的base。比如,int("A4", 16)会创建一个值为164的整数。表2-3中展示了这种用法。

表2-4中展示了位逻辑操作符,所有的二元位逻辑操作符(|、^、&、<<与>>)都有其对应的增强版赋值操作符(|=、^=、&=、<<=与>>=),这里,x op= y在运算逻辑上与x = x op y是等价的(这里的等价是指通常的情况,即读取x的值没有副作用。)

如果需要存放多个true/false标记,就可以使用一个整数;如果需要测试单个位,就可以使用位逻辑操作符。使用布尔值也可以满足要求,虽然不那么紧凑,但是更方便。

2.2.2 布尔型

有两个内置的布尔型对象:True与False。与所有其他的Python数据类型(不管是内置的、标准库的还是自定义的)类似,布尔数据类型也可以当作函数进行调用——不指定参数时将返回False,给定的是布尔型参数时,会返回该参数的一个拷贝,给定的是其他类型的参数时,则会尝试将其转换为布尔数据类型。所有内置的数据类型与标准库提供的数据类型都可以转换为一个布尔型值,为自定义数据类型提供布尔型转换也很容易。下面给出了两个布尔型赋值操作以及两个布尔表达式:

>>> t = True
>>> f = False
>>> t and f
False
>>> t and True
True

前面已经讲过,Python提供了3个逻辑操作符:and、or与not。and与or都使用“短路”逻辑,并返回决定其结果的操作数,not则总是返回True或False。

习惯于使用老版本Python的程序员有时会使用1与0,而非True与False,这种用法几乎总是可以正常工作的,但是建议在需要布尔型值的时候,新代码中还是使用内置的布尔型对象。

时间: 2024-08-24 07:50:53

《Python 3程序开发指南(第2版•修订版)》——2.2 Integral类型的相关文章

《Python 3程序开发指南(第2版•修订版)》——第1章 过程型程序设计快速入门 1.1 创建并运行Python程序

第1章 过程型程序设计快速入门 本章提供了足以开始编写Python程序的信息.如果此时尚未安装Python,强烈建议读者先行安装Python,以便随时进行编程实践,获取实际经验,巩固所学的内容. 本章第1节展示了如何创建并执行Python程序.你可以使用自己最喜欢的普通文本编辑器来编写Python代码,但本节中讨论的IDLE程序设计环境提供的不仅是一个代码编辑器,还提供了很多附加的功能,包括一些有助于测试Python代码.调试Python程序的工具. 第2节介绍了Python的8个关键要素,通过

《Python 3程序开发指南(第2版•修订版)》——导读

前 言 在应用广泛的各种语言中,Python或许是最容易学习和最好使用的.Python代码很容易阅读和编写,并且非常清晰,而没有什么隐秘的.Python是一种表达能力非常强的语言,这意味着,在设计同样的应用程序时,使用Python进行编码所需要的代码量要远少于使用其他语言(比如C++或Java)的代码量. Python是一种跨平台的语言:一般来说,同样的Python程序可以同时在Windows平台与UNIX类平台(比如Linux.BSD与Mac OS X)上运行--只需要将构成Python程序的

《Python 3程序开发指南(第2版•修订版)》——2.7 练习

2.7 练习 1.修改程序print_unicode.py,以便用户可以在命令行上输入几个单独的单词,并且只有在Unicode字符名包含用户指定的所有单词时才打印相应列.这意味着,我们可以输入类似于如下的命令: print_unicode_ans.py greek symbol 实现上述要求的一种方法是使用words列表替换word变量(其中存放0.None或字符串).改变代码后,要记得更新使用帮助信息.这一改变需要添加不到10行代码,另外需要对不到10行的代码进行适当修改.文件print_un

《Python 3程序开发指南(第2版•修订版)》——2.3 浮点类型

2.3 浮点类型 Python提供了3种浮点值:内置的float与complex类型,以及来自标准库的decimal.Decimal类型,这3种数据类型都是固定的.float类型存放双精度的浮点数,具体取值范围则依赖于构建Python的C(或C#或Java)编译器,由于精度受限,对其进行相等性比较并不可靠.float类型的数值要使用小数点或使用指数表示,比如,0.0.4..5.7.-2.5.-2e9.8.9e-4等. 计算机使用基数2表示浮点数--这意味着,有些十进制数可以准确表示(比如0.5)

《Python 3程序开发指南(第2版•修订版)》——1.2 Python的关键要素

1.2 Python的关键要素 在本节中,我们将学习Python的8个关键要素,下一节中,我们将展示如何借助这些要素编写实际的小程序.关于本节中讲述的各关键要素,都有更多的内容需要阐述,因此,阅读本节的内容时,有时候你会觉得Python似乎遗失了一些内容,使得很多工作只能以一种冗繁的模式完成,如果使用前向索引或索引表格中的内容,那么你几乎总是可以发现Python具备你需要的特性,并且可以更紧凑的表达方式来完成当前展示的工作方式--还有很多其他内容. 1.2.1 要素#1:数据类型 任何程序语言都

《Python 3程序开发指南(第2版•修订版)》——2.4 字符串

2.4 字符串 字符串是使用固定不变的str数据类型表示的,其中存放Unicode字符序列.str数据类型可以作为函数进行调用,用于创建字符串对象--参数为空时返回一个空字符串,参数为非字符串类型时返回该参数的字符串形式,参数为字符串时返回该字符串的拷贝.str()函数也可以用作一个转换函数,此时要求第一个参数为字符串或可以转换为字符串的其他数据类型,其后跟随至多两个可选的字符串参数,其中一个用于指定要使用的编码格式,另一个用于指定如何处理编码错误. 前面我们注意到,字符串是使用引号创建的,可以

《Python 3程序开发指南(第2版•修订版)》——2.5 实例

2.5 实例 在这一节中,我们将根据本章以及前面一章中所学的知识,提供两个虽小但完整的程序,以助于巩固到此为止所学的Python知识.第一个程序有点偏数学化,但是非常小,大约35行代码.第二个程序是关于文本处理的,并且更具体,其中包含7个函数,大约80行代码. 2.5.1 quadratic.py 二次方程是指形如ax2 + bx + c = 0的方程,其中,a不为0描述的是抛物线.这一方程的根可以由公式 得出,其中,公式的b2-4ac部分称为判别式--如果为正值,那么该方程有两个实根:如果为0

《Python 3程序开发指南(第2版•修订版)》——1.5 练习

1.5 练习 在本书的每一章最后,都有一节练习,设置练习的目的是鼓励读者对Python进行实践,获取实际经验,以助于吸收每章中所学的知识.本节包括的实例与练习既涉及数字处理,也涉及文本处理,以便尽可能满足更多读者的需求.此外,这些实例与练习都有非常小的代码规模,以便于读者将重点和注意力集中于学习与思考,而不是仅仅输入代码.本书的实例中,为每个练习都提供了一个解决方案. 1.bigdigits.py程序的一个变形,不再打印*,而是打印具体的数字.例如: bigdigits_ans.py 71942

《Python 3程序开发指南(第2版•修订版)》——7.3 写入与分析XML文件

7.3 写入与分析XML文件 有些程序将其处理的所有数据都使用XML文件格式,还有些其他程序将XML用作一种便利的导入/导出格式.即便程序的主要格式是文本格式或二进制格式,导入与导出XML的能力也是有用的,并且始终是值得考虑的一项功能. Python提供了3种写入XML文件的方法:手动写入XML:创建元素树并使用其write()方法:创建DOM并使用其write()方法.XML文件的读入与分析则有4种方法:人工读入并分析XML(不建议采用这种方法,这里也没有进行讲述--正确处理某些更晦涩和更高级