Python中的强制转换和强制转换有啥区别?

Posted

技术标签:

【中文标题】Python中的强制转换和强制转换有啥区别?【英文标题】:What's the difference between casting and coercion in Python?Python中的强制转换和强制转换有什么区别? 【发布时间】:2010-12-08 19:07:10 【问题描述】:

在 Python 文档和邮件列表中,我看到值有时是“强制转换的”,有时是“强制的”。

【问题讨论】:

【参考方案1】:

演员表是明确的。强制是隐含的。

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。那是 C++ 命名法; Python 使用不同的术语。 +1:对于这个问题,这个例子是完全有效的。它清楚地标记为 C++。 问题是关于 Python 语言上下文中的“cast”一词。解释float(1) 是构造而不是铸造的答案更好。 @CarlG 这是一个奇怪的问题,在 python cast 的上下文中并没有真正出现。文档中唯一提到它的地方是在 C 接口中,它指的是 C 和 ctypes 中的强制转换,它指的是 ctypes.cast 函数。关于构造的另一个答案是错误的float() 显然称为转换,而不是构造。任何内置转换函数的文档中从未提及构造。【参考方案2】:

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

【讨论】:

以上是关于Python中的强制转换和强制转换有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

C ++中这两种强制转换方法有啥区别? [复制]

java中的强制类型转换

SQL SERVER中强制类型转换cast和convert的区别

SQL SERVER中强制类型转换cast和convert的区别

SQL SERVER中强制类型转换cast和convert的区别

SQL SERVER中强制类型转换cast和convert的区别