2012-05-30 17 views
10

W pythonie 3.2 można łatwo zmienić typ obiektu. Na przykład:Zmiana ciągu znaków na bajt w języku Python 2.7

x=0 
print(type (x)) 
x=bytes(0) 
print(type (x)) 

będzie mi dać to:

<class 'int'> 
<class 'bytes'> 

Ale w Pythonie 2.7, wydaje się, że nie można używać w taki sam sposób, aby to zrobić. Jeśli zrobię ten sam kod, otrzymam:

<type 'int'> 
<type 'str'> 

Co mogę zrobić, aby zmienić typ na typ bajtów?

+0

Odpowiedź Martina zawiera odpowiednie informacje. –

Odpowiedz

8

Co mogę zrobić, aby zmienić typ na typ bajtów?

Nie można, nie ma takiego typu jak "bajty" w Pythonie 2.7.

Z dokumentacji Pythona 2.7 (5.6 Typy sekwencji): "Istnieje siedem typów sekwencji: ciągi znaków, ciągi znaków Unicode, listy, krotki, tagi, bufory i obiekty xrange."

Z dokumentacji Pythona 3.2 (5.6 Typy sekwencji): "Istnieje sześć typów sekwencji: ciągi znaków, sekwencje bajtów (obiekty bajtów), tablice bajtów (obiekty bytearray), listy, krotki i obiekty zasięgu."

11

Nie zmieniasz typów, przypisujesz inną wartość do zmiennej.

Uderzasz także w jedną z podstawowych różnic między pythoniem 2.x i 3.x; rażąco uproszczony 2.x typ unicode zastąpił typ str, którego nazwa została zmieniona na bytes. Zdarza się, że działa on w twoim kodzie, ponieważ nowsze wersje Pythona 2 dodały bytes jako alias dla str, aby ułatwić pisanie kodu, który działa w obu wersjach.

Innymi słowy, Twój kod działa zgodnie z oczekiwaniami.

+0

tak w 2.7, czy jest jakiś sposób, aby zrobić to samo w 3.2? Po prostu chcę, aby był w typie bajtów. – Smith

+3

Wpisz 'str' w python 2.7 * to * typ' bytes'. –

4

W języku Python 2.x, bytes to tylko alias dla str, więc wszystko działa zgodnie z oczekiwaniami. Co więcej, nie zmieniasz tutaj żadnego rodzaju obiektu - po prostu ponownie przypisujesz nazwę do innego obiektu, nazywając ją x.

+2

czyli w 2.7, czy jest jakiś sposób, aby zrobić to samo w 3.2? Po prostu chcę, aby był w typie bajtów. – Smith

Powiązane problemy