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

简介:

本节书摘来自异步社区《Python 3程序开发指南(第2版•修订版)》一书中的第2章,第2.2节,作者[英]Mark Summerfield,王弘博,孙传庆 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。

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的和。


screenshot


screenshot

所有二元数学操作符(+、-、/、//、%与)都有相应的增强版赋值操作符(+=、-=、/=、//=、%=与=),这里,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章中我们将看到,将自定义类型转换为整数或其他类型也是可能的。


screenshot

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

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


screenshot

如果需要存放多个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,这种用法几乎总是可以正常工作的,但是建议在需要布尔型值的时候,新代码中还是使用内置的布尔型对象。

相关文章
|
1月前
|
存储 程序员 Python
Python变量类型
Python变量类型
15 0
|
2月前
|
测试技术 API Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性
44 2
|
3月前
|
存储 Python 容器
Python魔法解析:探索变量类型的丰富多彩世界!
Python魔法解析:探索变量类型的丰富多彩世界!
17 0
|
1月前
|
Python
【python】—— 内置类型、运算符、表达式、关键字
【python】—— 内置类型、运算符、表达式、关键字
107 1
|
2天前
|
索引 Python
python 格式化、set类型和class类基础知识练习(上)
python 格式化、set类型和class类基础知识练习
21 0
|
16天前
|
存储 Python
python基础篇: 详解 Python 字典类型内置方法
python基础篇: 详解 Python 字典类型内置方法
25 1
|
1月前
|
安全 Python
Python系列(16)—— string类型转float类型
Python系列(16)—— string类型转float类型
|
1月前
|
Python
Python系列(15)—— int类型转string类型
Python系列(15)—— int类型转string类型
|
1月前
|
存储 Java 程序员
[Python] 变量的类型
[Python] 变量的类型
28 0
|
1月前
|
Java C# 开发者
Python 中的类型注解有哪些
Python 中的类型注解有哪些
15 4

热门文章

最新文章