В чем разница между приведением типов и приведением в Python?

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


person Justin R.    schedule 21.10.2009    source источник


Ответы (2)


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

person Martin v. Löwis    schedule 21.10.2009

Приведение явно. Принуждение подразумевается.

Примеры на Python:

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

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

person stonemetal    schedule 21.10.2009
comment
-1. Это номенклатура C ++; Python использует другую терминологию. - person SamB; 11.07.2010
comment
+1: Для этого вопроса пример вполне верен. И он четко обозначен как C ++. - person user183037; 08.05.2011
comment
Вопрос в термине «приведение» в контексте языка Python. Ответ, который объясняет, что float(1) - это строительство, а не литье, лучше. - person Carl G; 31.12.2013
comment
@CarlG Это странный вопрос, в контексте литья Python вообще не возникает. Единственное место, где он упоминается в документации, - это интерфейс C, где он относится к приведению типов в C и ctypes, где он ссылается на функцию ctypes.cast. Другой ответ неверен относительно конструкции float (). Это явно конверсия, а не строительство. Конструкция никогда не упоминается в документации ни для одной из встроенных функций преобразования. - person stonemetal; 06.01.2014