我在一个练习题中看到了这个,并且之前从未见过Python中使用的这种语法。没有任何运气谷歌搜索
答案 0 :(得分:5)
括号可以任意用于优先目的。
(int)
评估为int
,然后以value
作为参数进行调用,与int(value)
完全相同。它滥用额外的parens看起来像一个C风格的演员阵容,但它风格迥异,非常风格。
此可能有意义的方案可能包括根据str
是否发生int
将float
解析为.
或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