Python中的类型转换和强制转换有什么区别?
在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__
,可以让对象控制它们的强制转换。