在一些示例代码中,我看到使用了这种语法:
float1 = 7.0
float2 = 2.0
result = (int)(float1/float2)
关键似乎是强制结果为整数,但我找不到任何记录正在使用的(int)
语法的地方,或者为什么它优于int(float1/float2)
。对int()本身的调用应该返回零,但是(0)(float1/float2)
抛出一个TypeError并且抱怨零不是可调用的。很明显,解释器正在尝试执行int()引用,但是我不清楚为什么它会在那里找到可调用的。
有人能指点我这个语法的文档吗?
答案 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)
不建议在裸变量名称周围放置不必要的括号。