数字类型基础——Python表达式操作符

未匹配的标注

或许处理数字的最重要工具是表达式:数字(或其他对象)和操作符的组合,当其被Python执行时计算出值。在Python中,使用常用的数学标记和操作符号来书写表达式。比如,两个数相加为 X + Y,它告诉Python把 + 操作符应用到以XY命名的值上。这个表达式的结果是XY的和——另一个数字对象。

表5-2 列出了Python中可用的所有操作符表达式。许多都是不言自明的;比如,常用的数学操作符(+, −, *, /等等)被支持。如果过去使用过其他语言,有一些也会比较熟悉:%计算除法余数,<<执行按位左移,&计算出按位与的结果等等。其他的更多是Python特有的,且本质上不全是数字的:比如,is这个操作符测试对象的身份(也就是,内存中的地址,相等的严格形式),还有lambda创建未命名的函数。

image-20230216143321059

image-20230216143340230

因为本书同时讨论Python 2系列和3系列,下面是关于表5-2中操作符的版本差异和最近新增内容的一些笔记:

  • 在Python 2系列中,值不相等可写为 X!=YX <> Y。在Python 3系列中,后者被移除,因为是多余的。在两个版本中,最好的实践就是使用 X!=Y来进行所有值不相等的测试。
  • 在Python 2系列中,反引号表达式`X`的工作原理和repr(X)是一样的,并将对象转换为显示字符串。由于这个表达式的模糊性,在Python 3系列中被移除了;使用可读性更强的 strrepr 内置函数(在“数字显示格式”中有描述)。
  • 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 < YY < Z一样的结果。细节请参考 比较:普通的和链式的
  • 在最新版本的Python中,切片表达式 X[I:J:K] 等同于用切片对象来索引:X[slice(I, J, K)]
  • 在Python 2系列中,可以进行混合类型的值比较,且会将数字转换为一个通用类型,然后将其它混合类型根据类型名称进行排序。在Python 3系列中,非数字的混合类型的值比较是不被允许的且会引起异常;这包括通过代理(译注:替代物)来排序。
  • 字典的值比较在Python 3系列中也不被支持(虽然还支持相等测试);对 sorted(aDict.items())进行比较是一个可行的替代方案。

在后面的实践中将见到表5-2中的大多数操作符;然而,首先需要快速浏览这些操作符可能与表达式结合的方式。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~