Python中的类型转换和强制转换有什么区别?

36 投票
2 回答
34935 浏览
提问于 2025-04-15 15:15

在Python的文档和邮件列表中,我看到有时候会提到“类型转换”,有时候会提到“强制转换”。

2 个回答

44

“强制转换”是明确的,而“隐式转换”是隐含的。

在Python中的例子是:

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

强制转换通常只在C语言的外部函数接口中出现。在C或Java中通常称为强制转换的东西,在Python中被称为“转换”,不过因为和那些语言有相似之处,所以也常常被称为强制转换。在我接触过的几乎所有编程语言中(包括Python),隐式转换都是一种自动的类型变化。

32

我觉得在Python中不应该使用“类型转换”这个词,因为这里没有像C语言那样的“强制转换”。在Python里,只有类型转换。比如说,你可以用int(o)把一个对象o转换成整数(实际上是从o创建一个整数对象)。而“强制转换”发生在进行二元操作时:如果你做x+y,而x和y的类型不一样,它们会在执行操作之前被转换成同一种类型。在Python 2.x中,有一个特殊的方法__coerce__,可以让对象控制它们的强制转换。

撰写回答