浮点运算实际上做什么(int)前缀?

时间:2014-01-05 01:04:41

标签: python python-2.7

在一些示例代码中,我看到使用了这种语法:

float1 = 7.0
float2 = 2.0
result = (int)(float1/float2)

关键似乎是强制结果为整数,但我找不到任何记录正在使用的(int)语法的地方,或者为什么它优于int(float1/float2)。对int()本身的调用应该返回零,但是(0)(float1/float2)抛出一个TypeError并且抱怨零不是可调用的。很明显,解释器正在尝试执行int()引用,但是我不清楚为什么它会在那里找到可调用的。

有人能指点我这个语法的文档吗?

3 个答案:

答案 0 :(得分:10)

编写该代码的人过多地接触过比C更密切相关的语言而不是Python。在C,C ++,Java,C#等中,(int)something是将something强制转换为(int)的语法。在Python中,拼写int(something)只是一种奇怪的方式。 int是内置函数,可将something转换为int

通常,其他表达式(<expr>)的Python表达式<expr>只评估与<expr>相同的内容。 parantheses只能影响优先级,但在这种情况下它们不会。同样,<expr>(...)评估<expr>然后调用结果 - 请注意<expr>可以再次为任何表达式,它不仅限于简单的函数名称。

(x)(y)x(y)相同。 (int)(y)有效,因为int(y)有效。 (0)(y)没有,因为0(y)不起作用。

答案 1 :(得分:4)

在此代码中:result = (int)(float/float2)

(int)是一个被评估为返回int函数的表达式。然后使用单个参数调用,即float/float2

它不适用于(0),因为该表达式的结果是一个数字,它不是可调用类型,与TypeError状态完全相同。

答案 2 :(得分:3)

(int)评估为int,所以

result = (int)(float/float2)

相同
result = int(float/float2)

不建议在裸变量名称周围放置不必要的括号。