Кастинг против принуждения в Python - PullRequest
30 голосов
/ 21 октября 2009

В документации по Python и списках рассылки я вижу, что значения иногда «приводятся», а иногда «приводятся». В чем разница?

Ответы [ 2 ]

40 голосов
/ 21 октября 2009

Приведение является явным. Принуждение неявное.

Примеры в Python:

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

В ролях действительно появляется только в C FFI. То, что обычно называется приведением в C или Java, называется преобразованием в python, хотя его часто называют приведением из-за его сходства с этими другими языками. Почти во всех языках, с которыми у меня есть опыт (включая python) Принуждение - это неявное изменение типа.

32 голосов
/ 21 октября 2009

Я думаю, что «приведение» не должно использоваться для Python; есть только преобразование типов, но не приведение типов (в смысле C). Преобразование типов выполняется, например, до int(o), где объект o преобразуется в целое число (фактически, целочисленный объект создается из o). Принуждение происходит в случае бинарных операций: если вы делаете x+y, а x и y имеют разные типы, они приводятся в один тип перед выполнением операции. В 2.x специальный метод __coerce__ позволяет объекту контролировать свое принуждение.

...