Co nowego w Pythonie 3
Moduł __future__
Python 3.x wprowadził pewne słowa kluczowe i funkcje niezgodne z Pythonem 2, które można zaimportować za pomocą wbudowanego modułu __future__ w Pythonie 2. Zaleca się używanie importu __future__, jeśli planujesz obsługę języka Python 3.x dla swojego kodu.
Na przykład, jeśli chcemy, aby w Pythonie 2 zachodziło dzielenie liczb całkowitych w Pythonie 3.x, dodaj następującą instrukcję import.
from __future__ import division
Funkcja drukowania
Najbardziej zauważalną i najbardziej znaną zmianą w Pythonie 3 jest sposób, w jaki printfunkcja jest używana. Używanie nawiasów () z funkcją drukowania jest teraz obowiązkowe. W Pythonie 2 było to opcjonalne.
print "Hello World" #is acceptable in Python 2
print ("Hello World") # in Python 3, print must be followed by ()
Funkcja print () domyślnie wstawia nowy wiersz na końcu. W Pythonie 2 można to wyłączyć, umieszczając na końcu znak „,”. W Pythonie 3 "end = ''" dodaje spację zamiast nowej linii.
print x, # Trailing comma suppresses newline in Python 2
print(x, end=" ") # Appends a space instead of a newline in Python 3
Czytanie danych wejściowych z klawiatury
Python 2 ma dwie wersje funkcji wejściowych, input() i raw_input(). Funkcja input () traktuje odebrane dane jako ciąg znaków, jeśli są one zawarte w cudzysłowie '' lub "", w przeciwnym razie dane są traktowane jako liczba.
W Pythonie 3 funkcja raw_input () jest przestarzała. Ponadto odebrane dane są zawsze traktowane jako ciąg.
In Python 2
>>> x = input('something:')
something:10 #entered data is treated as number
>>> x
10
>>> x = input('something:')
something:'10' #entered data is treated as string
>>> x
'10'
>>> x = raw_input("something:")
something:10 #entered data is treated as string even without ''
>>> x
'10'
>>> x = raw_input("something:")
something:'10' #entered data treated as string including ''
>>> x
"'10'"
In Python 3
>>> x = input("something:")
something:10
>>> x
'10'
>>> x = input("something:")
something:'10' #entered data treated as string with or without ''
>>> x
"'10'"
>>> x = raw_input("something:") # will result NameError
Traceback (most recent call last):
File "<pyshell#3>", line 1, in
<module>
x = raw_input("something:")
NameError: name 'raw_input' is not defined
Dzielenie całkowite
W Pythonie 2 wynik dzielenia dwóch liczb całkowitych jest zaokrąglany do najbliższej liczby całkowitej. W rezultacie 3/2 pokaże 1. Aby otrzymać dzielenie zmiennoprzecinkowe, licznik lub mianownik musi być jawnie użyty jako liczba zmiennoprzecinkowa. W związku z tym albo 3,0 / 2, albo 3 / 2,0 lub 3,0 / 2,0 da wynik 1,5
Python 3 domyślnie ocenia 3/2 jako 1,5, co jest bardziej intuicyjne dla nowych programistów.
Reprezentacja Unicode
Python 2 wymaga, abyś oznaczył ciąg za pomocą au, jeśli chcesz zapisać go jako Unicode.
Python 3 domyślnie przechowuje ciągi znaków jako Unicode. Mamy ciągi Unicode (utf-8) i 2 klasy bajtowe: tablice bajtowe i bajtowe.
Funkcja xrange () została usunięta
W Pythonie 2 funkcja range () zwraca listę, a xrange () zwraca obiekt, który w razie potrzeby wygeneruje elementy z zakresu, oszczędzając pamięć.
W Pythonie 3 funkcja range () została usunięta, a nazwa xrange () została zmieniona na range (). Ponadto obiekt range () obsługuje wycinanie w Pythonie 3.2 i nowszych.
zgłosić wyjątek
Python 2 akceptuje obie notacje, „starą” i „nową” składnię; Python 3 generuje błąd SyntaxError, jeśli nie umieścimy argumentu wyjątku w nawiasach.
raise IOError, "file error" #This is accepted in Python 2
raise IOError("file error") #This is also accepted in Python 2
raise IOError, "file error" #syntax error is raised in Python 3
raise IOError("file error") #this is the recommended syntax in Python 3
Argumenty w wyjątkach
W Pythonie 3 argumenty do wyjątku powinny być deklarowane za pomocą słowa kluczowego „as”.
except Myerror, err: # In Python2
except Myerror as err: #In Python 3
Funkcja next () i metoda .next ()
W Pythonie 2 next () jako metoda obiektu generatora jest dozwolona. W Pythonie 2 akceptowana jest również funkcja next () do iteracji po obiekcie generatora. Jednak w Pythonie 3 metoda next (0 jako metoda generatora jest przerywana i podnosiAttributeError.
gen = (letter for letter in 'Hello World') # creates generator object
next(my_generator) #allowed in Python 2 and Python 3
my_generator.next() #allowed in Python 2. raises AttributeError in Python 3
Narzędzie 2to3
Wraz z interpreterem Pythona 3, skrypt 2to3.py jest zwykle instalowany w folderze tools / scripts. Czyta kod źródłowy Python 2.xi stosuje serię naprawiaczy, aby przekształcić go w prawidłowy kod Python 3.x.
Here is a sample Python 2 code (area.py):
def area(x,y = 3.14):
a = y*x*x
print a
return a
a = area(10)
print "area",a
To convert into Python 3 version:
$2to3 -w area.py
Converted code :
def area(x,y = 3.14): # formal parameters
a = y*x*x
print (a)
return a
a = area(10)
print("area",a)