Python中的强制转换与强制

时间:2009-10-21 16:51:30

标签: python casting types coercion

在Python文档和邮件列表中,我看到值有时会“强制转换”,有时会“强制”。有什么不同?

2 个答案:

答案 0 :(得分:40)

Cast是明确的。 Coerce是隐含的。

Python中的例子是:

cast(2, POINTER(c_float)) #cast
1.0 + 2  #coerce 
1.0 + float(2) #conversion

Cast真的只出现在C FFI中。通常在C或Java中称为转换的内容在python中称为转换,但由于它与其他语言的相似性,它通常被称为转换。几乎我遇到的每种语言(包括python)Coercion都是隐式类型更改。

答案 1 :(得分:32)

我认为“cast”不应该用于Python;只有类型转换,但没有强制转换(在C意义上)。进行类型转换,例如通过int(o),其中对象o被转换为整数(实际上,整数对象是由o构造的)。在二进制操作的情况下发生强制:如果你执行x+y,并且x和y具有不同的类型,则在执行操作之前将它们强制转换为单个类型。在2.x中,一种特殊的方法__coerce__允许对象控制它们的强制。