我怎么能确定python转换为什么类型?

时间:2016-08-04 21:39:02

标签: python

如果计算中有一个(或多个)元素,它总是将结果转换为浮动吗?

例如:

1*1.0  # float 
from   fractions        import Fraction
Fraction(1) * 1.0   # float

2 个答案:

答案 0 :(得分:2)

我说如果其中一个参数是float,它总会转换为float,因为float是最常见的数字类型。因此,如果你用浮点数进行一些操作(在你的情况下乘法),其他数字解释器可以确定它可以将其他数字转换为浮点数(不包括int,Fraction或者甚至是Bool)丢失任何信息,但它不能以其他方式做到这一点。

这是链接(https://docs.python.org/2.4/lib/typesnumeric.html) 这表明我忘了显而易见的事情。复数比Float更常见。所以如果你试图将浮动乘以复数。你会变得复杂。

" Python完全支持混合算术:当二进制算术运算符具有不同数字类型的操作数时,操作数具有“更窄”''类型被扩展到另一个类型,其中普通整数比长整数窄,比浮点更窄,比复数更窄。混合类型数字之间的比较使用相同的规则。"

答案 1 :(得分:-1)

不,它有效,因为Fraction类实现了一个console = console || {}; // just in case //additional method use in watch or unwatch console._defineProperty=function(oObj, sProp, watch){ sPrivateProp = "$_"+sProp+"_$"; // to minimize the name clash risk oObj[sPrivateProp] = oObj[sProp]; // overwrite property Object.defineProperty(oObj, sProp, { get: function () { return oObj[sPrivateProp]; }, set: function (value) { if (watch)//if true then watching if false then not watch console.log("setting " + sProp + " to " + value); oObj[sPrivateProp] = value; } }); }; console.watch = function(oObj, sProp) { this._defineProperty(oObj,sProp,true); }; console.unwatch = function(oObj, sProp) { this._defineProperty(oObj,sProp,false); }; //USE CASE var user={ name:"Tom"}; console.watch(user,"name"); user.name="Mike";//watching user.name="Rafael";//watching console.unwatch(user,"name"); user.name="John";//not wathing user.name="Donatello";//not wathing console.watch(user,"name"); user.name="Greg";//wathing user.name="Ron";//wathing(可能是__mul__)方法,用于定义与另一个对象(在你的情况下是一个浮点数)的乘法结果。

这称为运营商重载。

编辑:我不明白为什么我被投票。根据你的例子,答案是不,你不总是得到一个浮动,它取决于另一个对象

例如,您可以在Python Fraction源代码中看到__rmul____mul__的实现:https://hg.python.org/cpython/file/tip/Lib/fractions.py#l421以及执行计算的函数:https://hg.python.org/cpython/file/tip/Lib/fractions.py#l377。< / p>