数字类型基础——Python表达式操作符——混合的类型被向上转换

未匹配的标注

除了在表达式中混合操作符外,还可以混合数字类型。比如,可以将整数和浮点数相加:

40 + 3.14

但这导致另一个问题:结果是什么类型——整数还是浮点数?答案很简单,特别是如果以前使用过其他语言:在混合类型的数字表达式中,Python首先将运算对象向上转换为最复杂运算对象的类型,然后在同样类型的运算对象上执行数学运算。这个行为类似于C语言中的类型转换。

Python对数字类型的复杂度进行了如下排序:整数比浮点数简单,浮点数比复数简单。所以,在前面例子中,当整数和浮点数混合时,整数先向上转换为浮点数,然后浮点数学运算产生浮点结果:

>>> 40 + 3.14 # 整数转为浮点数,浮点数学运算/结果
43.14

类似地,一个运算对象是复数的混合类型表达式会导致另一个运算对象被向上转换为复数,且表达式产生复数的结果。在Python 2系列中,在值太大不能被普通整数表示时,普通整数还会被转换为长整数;在3系列中,整数完全包括了长整数。

可以通过调用内置函数来强制手动转换:

>>> int(3.1415) # 将浮点数截取为整数
3
>>> float(3) # 转换整数为浮点数
3.0

然而,通常不需要这么做:因为Python会自动在表达式中转换为更复杂的类型,结果通常是你想要的。

还有,记住所有这些混合类型转换只在表达式中(指的是那些使用数字运算符和比较运算符的表达式)混合数字类型(比如:整数和浮点数)时才适用,。一般地,Python不会自动跨类型转换。比如,字符串和整数相加会导致错误,除非手动转换类型;在第7章学习字符串时留意一个例子。

注意:

在Python 2系列中,非数字的混合类型可以被比较,但不能被转换——混合类型比较是根据一个看似确定但并不美观的规则:它比较对象类型的字符串名称。在3系列中,非数字混合类型的数字比较是绝对不被允许的而且会导致异常。注意这只适用于如>这种比较运算符;其它的运算符如+在3和2系列中都不被允许用来操作混合的非数字类型。


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

上一篇 下一篇
讨论数量: 0
发起讨论 查看所有版本


暂无话题~