Casting vs. coercion in Python
Domanda
Nella documentazione di Python e nelle mailing list vedo che i valori sono talvolta "cast", e talvolta "forzati". Qual è la differenza?
Soluzione
Penso che " casting " non dovrebbe essere usato per Python; ci sono solo conversioni di tipi, ma nessun cast (nel senso C). Viene eseguita una conversione del tipo, ad es. attraverso int (o)
dove l'oggetto o viene convertito in un numero intero (in realtà, un oggetto intero viene costruito da o). La coercizione si verifica nel caso di operazioni binarie: se si esegue x + y
e xey hanno tipi diversi, vengono costretti in un singolo tipo prima di eseguire l'operazione. In 2.x, un metodo speciale __coerce__
consente agli oggetti di controllare la loro coercizione.
Altri suggerimenti
Il cast è esplicito. Il coerce è implicito.
Gli esempi in Python sarebbero:
cast(2, POINTER(c_float)) #cast
1.0 + 2 #coerce
1.0 + float(2) #conversion
Il cast arriva davvero solo in C FFI. Quella che viene generalmente chiamata casting in C o Java viene definita conversione in Python, anche se spesso viene definita casting a causa delle sue somiglianze con quelle altre lingue. In quasi tutte le lingue con cui ho esperienza (incluso python) Coercion è modifica implicita del tipo.