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

相关文章
|
3月前
|
Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
|
2月前
|
存储 索引 Python
Python散列类型(1)
【10月更文挑战第9天】
|
2月前
|
计算机视觉 Python
Python实用记录(一):如何将不同类型视频按关键帧提取并保存图片,实现图片裁剪功能
这篇文章介绍了如何使用Python和OpenCV库从不同格式的视频文件中按关键帧提取图片,并展示了图片裁剪的方法。
85 0
|
2月前
|
存储 数据安全/隐私保护 索引
Python 散列类型三以及函数基础
【10月更文挑战第11天】
Python 散列类型三以及函数基础
|
2月前
|
Python
【10月更文挑战第6天】「Mac上学Python 11」基础篇5 - 字符串类型详解
本篇将详细介绍Python中的字符串类型及其常见操作,包括字符串的定义、转义字符的使用、字符串的连接与格式化、字符串的重复和切片、不可变性、编码与解码以及常用内置方法等。通过本篇学习,用户将掌握字符串的操作技巧,并能灵活处理文本数据。
57 1
【10月更文挑战第6天】「Mac上学Python 11」基础篇5 - 字符串类型详解
|
2月前
|
Python
【10月更文挑战第6天】「Mac上学Python 10」基础篇4 - 布尔类型详解
本篇将详细介绍Python中的布尔类型及其应用,包括布尔值、逻辑运算、关系运算符以及零值的概念。布尔类型是Python中的一种基本数据类型,广泛应用于条件判断和逻辑运算中,通过本篇的学习,用户将掌握如何使用布尔类型进行逻辑操作和条件判断。
64 1
【10月更文挑战第6天】「Mac上学Python 10」基础篇4 - 布尔类型详解
WK
|
2月前
|
存储 Python
Python内置类型名
Python 内置类型包括数字类型(int, float, complex)、序列类型(str, list, tuple, range)、集合类型(set, frozenset)、映射类型(dict)、布尔类型(bool)、二进制类型(bytes, bytearray, memoryview)、其他类型(NoneType, type, 函数类型等),提供了丰富的数据结构和操作,支持高效编程。
WK
19 2
|
2月前
|
存储 编译器 索引
Python 序列类型(2)
【10月更文挑战第8天】
Python 序列类型(2)
|
2月前
|
存储 C++ 索引
Python 序列类型(1)
【10月更文挑战第8天】
|
2月前
|
存储 Java Apache
Python Number类型详解!
本文详细介绍了 Python 中的数字类型,包括整数(int)、浮点数(float)和复数(complex),并通过示例展示了各种算术操作及其类型转换方法。Python 的 `int` 类型支持任意大小的整数,`float` 类型用于表示实数,而 `complex` 类型用于表示复数。此外,文章还对比了 Python 和 Java 在数字类型处理上的区别,如整数类型、浮点数类型、复数类型及高精度类型,并介绍了各自类型转换的方法。尽管两种语言在语法上有所差异,但其底层逻辑是相通的。通过本文,读者可以更好地理解 Python 的数字类型及其应用场景。
58 2