Python中的强制转换与强制

Jus*_* R. 32 python types casting coercion

在Python文档和邮件列表中,我看到值有时是"强制转换",有时是"强制".有什么不同?

sto*_*tal 40

演员是明确的.Coerce是隐含的.

Python中的示例如下:

cast(2, POINTER(c_float)) #cast
1.0 + 2  #coerce 
1.0 + float(2) #conversion
Run Code Online (Sandbox Code Playgroud)

Cast真的只出现在C FFI中.通常在C或Java中称为转换的内容在python中称为转换,但由于它与其他语言的相似性,它通常被称为转换.在几乎所有我使用过的语言(包括python)中,强制都是隐式类型更改.

  • +1:对于这个问题,这个例子是完全有效的.它清楚地标记为C++. (12认同)
  • -1.这是C++的命名法; Python使用不同的术语. (2认同)
  • 问题是关于Python语言中的'cast'这个术语.解释"float(1)"是建筑而不是铸造的答案更好. (2认同)

Mar*_*wis 32

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