如果计算中有一个(或多个)元素,它是否总是将结果转换为浮点数?我怎么能确定什么类型的python转换为?
例如:
1*1.0 # float
from fractions import Fraction
Fraction(1) * 1.0 # float
如果计算中有一个(或多个)元素,它是否总是将结果转换为浮点数?我怎么能确定什么类型的python转换为?
例如:
1*1.0 # float
from fractions import Fraction
Fraction(1) * 1.0 # float
我会说,如果其中一个参数是浮动,它总是会强制浮动,因为float是最常见的数字类型。所以如果你用浮点数和其他数字解释器进行一些操作(在你的情况下乘法),可以肯定它可以将其他数字转换为浮点数(不管它是int,Fraction还是Bool)而不丢失任何信息,但它不能以其他方式做到这一点。
这是链接(https://docs.python.org/2.4/lib/typesnumeric.html) 它暗示了我明显的东西,我忘了。复数比Float更通用。所以,如果你会尝试乘法浮动复杂。你会变得复杂。
“Python完全支持混合算术:当二进制算术运算符的操作数具有不同的数值类型时,具有”窄“类型的操作数会扩展到另一个操作数,其中纯整数比长整数窄比浮点窄比比较复杂,比较混合类型的数字使用相同的规则。“
没有,它的工作原理是因为分数类实现用于与其他对象(浮在你的情况下)定义了一个乘法的结果__mul__
(可能__rmul__
)方法。
这就是所谓的操作符重载。
编辑:我不明白为什么我downvoted。根据你的例子,答案是不,你不总是得到一个浮动,它取决于其他对象。
例如,可以在Python馏分源代码中看到的__mul__
和__rmul__
实现:https://hg.python.org/cpython/file/tip/Lib/fractions.py#l421且确实的计算功能:https://hg.python.org/cpython/file/tip/Lib/fractions.py#l377。
谢谢你的回答。我想知道你能否指出我的任何相关文件。谢谢 – galaxyan
编辑答案,提供链接和报价 –