Ważne różnice między wersją Pythona 2.7.x a wersją Pythona 3.x

Ważne różnice między wersją Pythona 2.7.x a wersją Pythona 3.x
Wielu początkujących użytkowników Pythona zastanawia się, której wersji Pythona powinni użyć.
A co, jeśli rozpoczynasz nowy projekt i masz wybór?

Powiedziałbym, że obecnie nie ma dobrego lub złego wyboru, o ile zarówno Python 2.7.x, jak i Python 3.x obsługują biblioteki, których planujesz użyć.
Jednak warto przyjrzeć się głównym różnicom między tymi dwoma najpopularniejszymi wersjami Pythona, aby uniknąć typowych pułapek podczas pisania kodu jednej z nich lub jeśli planujesz przenieść swój projekt.
Funkcja drukowania
Instrukcja print w Pythonie 2 została zastąpiona funkcją print (), co oznacza, że musimy zawijać w nawiasach obiekt, który chcemy wydrukować,.
Python 2 nie ma problemu z dodatkowymi nawiasami, ale w przeciwieństwie do tego, Python 3 zgłosi błąd składniowy, jeśli nazwiemy funkcję drukowania w języku Python dwukierunkowym bez nawiasów.
Python 3.x
print(‘Python’, python_version())
print(‘Hello, World!’)
print(“some text,”, end=””)
print(‘ print more text’)
Output

Python 3.4.1
Hello, World!
trochę tekstu, wydrukuj więcej tekstu
W tym kodzie funkcja print w Pythonie 2.x została zastąpiona funkcją print () w Pythonie 3.x.
Innymi słowy, aby drukować w Pythonie 3.x, wymagana jest dodatkowa para nawiasów.
Operator dzielenia
Jeśli przenosimy nasz kod lub wykonujemy kod Python 3.x w Pythonie 2.x, może być niebezpiecznie, jeśli zmiany dzielenia liczb całkowitych pozostaną niezauważone, ponieważ nie spowodują żadnych błędów.
Zaleca się użycie wartości zmiennoprzecinkowej, takiej jak 6.0/5 lub 6/5.0, aby uzyskać oczekiwany wynik podczas przenoszenia naszego kodu.

Python 3.x
print(‘Python’, python_version())
print(‘3 / 2 =’, 3 / 2)
print(‘3 // 2 =’, 3 // 2)
print(‘3 / 2.0 =’, 3 / 2.0)
print(‘3 // 2.0 =’, 3 // 2.0)
Output

Python 3.4.1
3/2 = 1,5
3 // 2 = 1
3 / 2,0 = 1,5
3 // 2,0 = 1,0
Unicode
Python 2 ma typy ASCII str (), oddzielne unicode (), ale nie ma typu bajtu.
Teraz w Pythonie 3 mamy wreszcie łańcuchy Unicode (utf-8) oraz dwie klasy bajtowe, bajt i tablice bajtowe.
To znaczy, że w Pythonie 2 niejawnym typem str jest ASCII.
Ale w Pythonie 3.x niejawnym typem str jest Unicode.

Python 3.x
print (‘Python’, python_version ())
print(‘strings are now utf-8 \u03BCnico\u0394é!’)

Python 3.4.1
strings are now utf-8 μnicoΔé!
print(‘Python’, python_version(), end=””)
print(‘ has’, type(b’ bytes for storing data’))
Python 3.4.1 has <class ‘bytes’>
print(‘and Python’, python_version(), end=””)
print(‘ also has’, type(bytearray(b’bytearrays’)))
and Python 3.4.1 also has <class ‘bytearray’>
xrange
Funkcja xrange () w Pythonie 2.7.x nie istnieje w Pythonie 3.x.
W Pythonie 2.7.x, range zwraca listę, więc range (3) zwraca [0, 1, 2], podczas gdy xrange zwraca obiekt xrange, więc xrange (3) zwraca obiekt iteratora, który działa podobnie do iteratora Java i generuje liczbę w razie potrzeby.
Jeśli musimy wielokrotnie iterować tę samą sekwencję, najlepiej jest użyć funkcji range (), ponieważ zapewnia listę statyczną.
xrange () rekonstruuje sekwencję za każdym razem.
xrange () nie obsługuje wycinków ani innych metod tworzenia list.
Zaletą xrange () jest to, że oszczędza pamięć, gdy zadanie polega na iteracji w dużym zakresie.
W Pythonie 3.x funkcja range robi teraz to samo, co xrange w Pythonie 2.7.x, więc aby nasz kod był przenośny, powinniśmy zamiast tego rozważyć użycie range.
Zatem funkcja zakresu w Pythonie 3.x to xrange z Pythona 2.7.x.
for x in xrange(1, 5):
print(x),
for x in range(1, 5):
print(x),
Output in Python 3.x
NameError: nazwa „xrange” nie jest zdefiniowana
__future__ module
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życie __future__ imports, jeśli planujesz obsługę języka Python 3.x dla swojego kodu.
Na przykład, jeśli chcemy, aby w Pythonie Pythonie 3.x działało dzielenie liczb całkowitych z Pythona 2, możemy je zaimportować przez dzielenie __future__import
Na przykład w poniższym kodzie Pythona 2.x używamy funkcji dzielenia liczb całkowitych w języku Python 3.x przy użyciu __future__module:
# W poniższym kodzie Pythona 2.7.x dzielenie działa
# to samo co Python 3.x, ponieważ używamy __future__
z dzielenia __future__import
print 7 / 5
print -7 / 5
Output
1.4
-1.4

Michał Pawlicki

Komentarze z Facebooka

Komentarze obecnie - OFF.