W dokumentacji Pythona i na listach dyskusyjnych widzę, że wartości są czasami "rzucane", a czasami "wymuszane". Jaka jest różnica?Casting vs. przymus w Pythonie
Odpowiedz
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.
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.
-1. To jest nomenklatura C++; Python używa innej terminologii. – SamB
+1: Dla tego pytania przykład jest całkowicie poprawny. Jest wyraźnie oznaczony jako C++. – user183037
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. –