type for float convert cast python casting types coercion

for - python decimal to int



Casting vs. coercion en Python (2)

En la documentación de Python y en las listas de correo, veo que los valores a veces se "convierten" y, a veces, "se obligan". ¿Cuál es la diferencia?


El reparto es explícito. Coerción es implícita.

Los ejemplos en Python serían:

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

El reparto realmente solo aparece en el C FFI. Lo que normalmente se denomina casting en C o Java se conoce como conversión en python, aunque a menudo se lo conoce como casting debido a sus similitudes con esos otros lenguajes. En casi todos los idiomas que tengo experiencia con (incluyendo python) Coercion es un cambio de tipo implícito.


Creo que "casting" no se debe usar para Python; solo hay conversión de tipo, pero no hay conversiones (en el sentido C). Una conversión de tipo se realiza, por ejemplo, a través de int(o) donde el objeto o se convierte en un entero (en realidad, un objeto entero se construye a partir de o). La coacción ocurre en el caso de operaciones binarias: si haces x+y , y xey tienen diferentes tipos, se convierten en un solo tipo antes de realizar la operación. En 2.x, un método especial __coerce__ permite al objeto controlar su coerción.