这个语法叫什么? (int)(value)与int(value)相同

时间:2017-11-14 22:09:57

标签: python python-3.x syntax

我在一个练习题中看到了这个,并且之前从未见过Python中使用的这种语法。没有任何运气谷歌搜索

5 个答案:

答案 0 :(得分:5)

括号可以任意用于优先目的。

(int)评估为int,然后以value作为参数进行调用,与int(value)完全相同。它滥用额外的parens看起来像一个C风格的演员阵容,但它风格迥异,非常风格。

可能有意义的方案可能包括根据str是否发生intfloat解析为.str (float if '.' in value else int)(value) ,例如:

{{1}}

注意:写完之后,仍然很难看,但它说明了对parens的使用。

答案 1 :(得分:3)

(int)(value)int(value)相同。语法没有(其他)特殊名称。在这种情况下,括号多余,因为(int)int相同:

>>> (int)
<type 'int'>
>>> (int)('2')
2

你应该坚持int(value)并避免含糊不清。

答案 2 :(得分:3)

简而言之 - 这种语法称为冗余。

让我们先考虑一下括号。这是一个使用算术的例子。

(3) + (2)

我确定您知道括号的优先级高于+ - 因此此表达式的计算结果如下:

3 + 2

如果括号中还有更多内容,那么首先会发生这种情况 - 但由于没有这一点,所以没有什么意义。

现在举个例子。

(int) ("5")

左侧的括号是多余的 - 右侧的括号表示函数调用。但首先,它会评估仅作为括号的括号。

int("5")

您指出的两种语法在行为上是相同的 - 但没有理由使用带有额外括号的语法,因为它们是多余的。

您可能会在使用C投射类型的地方混淆(type)object语法。请注意,python中没有这样的语法 - 由于上述原因,您编写的代码巧合。

答案 3 :(得分:2)

似乎是从C等其他语言错误地复制的东西。它实际上并不是Python中的无效语法,但int周围的括号实际上什么都不做而被忽略。

答案 4 :(得分:2)

两者都是一样的。在OOP中,我们称之为类型转换,概念类似。两种语法都与下面的内容相同: -

a = (int)(34.65)
print(a)
> 34
a = int(34.65)
print(a) 
> 34