数字类型基础——python表达式操作符 | 第二部分 类型与操作 —— 第 5 章: 数字类型 |《学习 python:强大的面向对象编程(第 5 版)》| python 技术论坛-380玩彩网官网入口
或许处理数字的最重要工具是表达式:数字(或其他对象)和操作符的组合,当其被python执行时计算出值。在python中,使用常用的数学标记和操作符号来书写表达式。比如,两个数相加为 x y
,它告诉python把
操作符应用到以x
和y
命名的值上。这个表达式的结果是x
和y
的和——另一个数字对象。
表5-2 列出了python中可用的所有操作符表达式。许多都是不言自明的;比如,常用的数学操作符( , −, *, /等等)被支持。如果过去使用过其他语言,有一些也会比较熟悉:%
计算除法余数,<<
执行按位左移,&
计算出按位与的结果等等。其他的更多是python特有的,且本质上不全是数字的:比如,is
这个操作符测试对象的身份(也就是,内存中的地址,相等的严格形式),还有lambda
创建未命名的函数。
因为本书同时讨论python 2系列和3系列,下面是关于表5-2中操作符的版本差异和最近新增内容的一些笔记:
- 在python 2系列中,值不相等可写为
x!=y
或x <> y
。在python 3系列中,后者被移除,因为是多余的。在两个版本中,最好的实践就是使用x!=y
来进行所有值不相等的测试。 - 在python 2系列中,反引号表达式`x`的工作原理和
repr(x)
是一样的,并将对象转换为显示字符串。由于这个表达式的模糊性,在python 3系列中被移除了;使用可读性更强的str
和repr
内置函数(在“数字显示格式”中有描述)。 x // y
取整除法表达式在python 2系列和3系列中总是去除掉小数部分的余数。x / y
表达式在3系列中执行真正的除法(保留余数),在2系列中执行经典的除法(截断为整数)。参见除法:经典的、取整的、真正的
。- 语法 [...] 用来同时表示列表字面量和列表理解表达式。后者执行一个隐式循环并将表达式结果存储到新列表中。例子请参见
第4章
,第14章
,第20章
。 - 语法 (...) 用来表示元组和表达式分组,还有生成器表达式——按需生成结果的一种列表理解,而不是构建一个结果列表。例子请参见
第4章
和第20章
。在这三种上下文中,小括号有时可以省略。 - 语法 {...} 用来表示字典字面量,且在python 3系列和2.7版本中用来表示集合字面量、字典和集合理解。例子请参见本章中涉及集合的讨论和
第4章
,第8章
,第14章
,第20章
。 yield
和 三元if/else
选择表达式在python2.5及之后的版本中可用。前者在生成器中返回了send(...)
参数;后者是多行if
语句的简写形式。yield
如果不单独位于赋值语句的右边,则需要小括号。- 比较操作符可以被链接起来:
x < y < z
生成了如同x < y
和y < z
一样的结果。细节请参考比较:普通的和链式的
。 - 在最新版本的python中,切片表达式
x[i:j:k]
等同于用切片对象来索引:x[slice(i, j, k)]
。 - 在python 2系列中,可以进行混合类型的值比较,且会将数字转换为一个通用类型,然后将其它混合类型根据类型名称进行排序。在python 3系列中,非数字的混合类型的值比较是不被允许的且会引起异常;这包括通过代理(译注:替代物)来排序。
- 字典的值比较在python 3系列中也不被支持(虽然还支持相等测试);对
sorted(adict.items())
进行比较是一个可行的替代方案。
在后面的实践中将见到表5-2中的大多数操作符;然而,首先需要快速浏览这些操作符可能与表达式结合的方式。