2009-10-21 34 views

Odpowiedz

30

Uważam, że "rzucanie" nie powinno być używane w Pythonie; istnieje tylko konwersja typu, ale nie ma rzutów (w sensie C). Konwersja typu jest wykonywana np. poprzez , gdzie obiekt o jest przekształcany na liczbę całkowitą (w rzeczywistości obiekt liczby całkowitej jest zbudowany z o). W przypadku operacji binarnych występuje przymus: jeśli robisz x+y, a x i y mają różne typy, są one wymuszane na jeden typ przed wykonaniem operacji. W wersji 2.x specjalna metoda pozwala obiektowi kontrolować ich przymus.

38

Przesyłanie jest jawne. Coerce jest niejawne.

Przykłady w Pythonie byłoby:

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

Obsada naprawdę sprowadza się tylko w C FFI. To, co jest zwykle nazywane rzutowaniem w języku C lub Java, nazywane jest konwersją w pythonie, choć często jest określane jako rzutowanie z powodu podobieństwa do innych języków. W prawie każdym języku, w którym mam doświadczenie (w tym python) Coercion jest niejawna zmiana typu.

+2

-1. To jest nomenklatura C++; Python używa innej terminologii. – SamB

+12

+1: Dla tego pytania przykład jest całkowicie poprawny. Jest wyraźnie oznaczony jako C++. – user183037

+2

Pytanie dotyczy pojęcia "obsada" w kontekście języka Python. Odpowiedź, która wyjaśnia, że ​​'float (1)' jest konstrukcją, a nie rzutowaniem, jest lepsza. –