Najważniejsze różnice między Pythonem 2 i 3: Jak poruszać się po zmianach
Tutorial ten obejmie następujące tematy:
- Wyrażenia
- Opcje wydruku
- Operacje nierówności
- Zakres
- Automatyczna migracja
- Performance issues
- Kilka istotnych zmian porządkowych
- Masz problemy?
Wyrażenia
Wyrażenia reprezentują coś, jak liczba, ciąg znaków lub instancja klasy. Każda wartość jest wyrażeniem! Wszystko, co coś robi, jest wyrażeniem. Każde przypisanie do zmiennej lub wywołanie funkcji jest wyrażeniem. Każda wartość zawarta w tej instrukcji jest wyrażeniem.
To jest to, co wpisałbyś, aby otrzymać wyrażenie w Pythonie 2:
X = raw_input ("enter some values)
Ale w Pythonie 3, musiałbyś wpisać to:
X = input ("enter some values")
Więc, cokolwiek wpiszemy jako wartość, zostanie przypisane do zmiennej x zarówno w 2 jak i 3. Gdy wpiszę 2*6 w Pythonie 2, wynikiem będzie 12, czyli wartość oceniana.
Jednakże, gdy ten sam program zostanie uruchomiony w Pythonie 3, wynikiem będą wartości łańcuchowe. W tym przypadku będzie to wyglądało jak 2*6 w formacie łańcuchowym.
Jak zatem możemy uzyskać oceniane wyrażenie? Teraz musimy użyć wyrażenia lub funkcji zwanej eval. kiedy napiszesz eval przed danymi wejściowymi, zamieni to wyrażenie w ocenianą wartość.
x= eval(input("enter some values")) = 12
Szczegółowe przykłady wyrażeń:
Tutaj wygląda to tak, jak w Pythonie 2:
name = input("What is your name? ")print ("Hello, %s." %name)
I dane wyjściowe:
A oto jak wyglądałoby to w Pythonie 3:
name = input("What is your name? ")print ("Hello, %s." %name)
I dane wyjściowe:
Jak widać wyraźnie, różnica między nimi jest bardzo niewielka.
Czytaj także: Wprowadzenie do języka programowania Python
Gdy Guido van Rossum opracował Pythona, chciał stworzyć „prosty” język programowania, który omijałby luki w zabezpieczeniach innych systemów. Ze względu na prostą składnię i wyrafinowane wyrażenia składniowe język ten stał się standardem dla różnych aplikacji naukowych, takich jak uczenie maszynowe.
Opcje wydruku
W Pythonie 2, print jest stwierdzeniem, które nie potrzebuje nawiasu. W Pythonie 3 print jest funkcją, a wartości muszą być zapisane w nawiasach.
Python 2
Wejście:
print "hello world"
Wyjście:
Python 3
Wejście:
1 != 1.0print (False)
Wyjście:
Operacje nierówności
Przejdźmy do trzeciej różnicy. Kiedy używamy operatora nierówności w Pythonie 2, musimy użyć znaków greater than > lub less than <. Jednak w Pythonie 3 istnieje operator ogólny. Wykrzyknik ! i znak równości = są używane, aby pokazać, czy rzeczy nie są równe tej samej ilości.
Python 2 – <> operator jest używany dla not equal
Python 3 – ! operator jest używany dla not equal
Python 2
Wejście:
1 <> 1.0print "False"
Wyjście:
Python 3
Wejście:
1 != 1.0print (False)1 != 1.0print (False)
Wyjście:
Zobacz także: Glances: Keep a good eye on your code with this Python monitoring tool
Range
Teraz przejdźmy do zakresów. Co to są zakresy?
Zakres służy do generowania listy liczb, która jest zwykle używana do iteracji po niej za pomocą for
pętli.
W tym miejscu widać X równe Zakresowi 10. Kiedy sprawdziliśmy zmienną X, zwróciła ona nasz typ listy. Oznacza to, że w Pythonie 2, zakres jest typem listy. Kiedy piszę X, po tym otrzymujemy listę obiektu. która jest 0 1 2 3 4 5 6 7 8 9.
Teraz przejdźmy do Pythona 3, kiedy piszemy x równe zakresowi 5. Ta wartość zakresu 5 jest przypisana do zmiennej X; kiedy sprawdzimy typ dla zmiennej X, to zwraca ona sam obiekt zakresu. Oznacza to, że w Pythonie 3 zakres jest sam w sobie obiektem zakresu.
Python 2
Input:
print range(0,10,1)
Output:
Python 3
Input:
print(list(range(10)))
Output:
Automatyzacja migracji
Jak zatem zautomatyzować skrypt migracyjny, aby przenieść kod z Pythona 2 do 3?
Możemy to przetestować na prostym programie typu Dodaj 2 Liczby w pythonie.
Python 2
Input:
n1 = 1n2 = 2add = float(n1) + float(n2)print 'sum of {0} and {1} is {2}'.format(n1, n2, add)
Output:
Teraz używając migracji z 2 do 3 możemy przekonwertować powyższy kod.
Wprowadzenie:
n1 = 1n2 = 2add = float(n1) + float(n2)print('sum of {0} and {1} is {2}'.format(n1, n2, add))
Wprowadzenie:
Więc widzimy, że można go przekonwertować na kod Pythona 3 za pomocą 2 do 3 w wierszu poleceń.
Python dostarcza własne narzędzie o nazwie 2to3.py. Które uruchamia kilka skryptów, aby przetłumaczyć twój kod Pythona 2 na 3. Chociaż nie jest to idealne, ale ogólnie wykonuje niesamowitą pracę. Po konwersji jakiegokolwiek kodu, powinieneś wejść i ręcznie naprawić wszelkie problemy.
Zobacz także: Chodź, Nagini. Musimy zweryfikować ten kod Pythona
Wydajność
Większość problemów z wydajnością została naprawiona w tej aktualizacji! Porównując benchmarki między tymi dwiema wersjami, różnice są prawie pomijalne.
Kilka poważnych zmian
Python 2
- Nawiasy funkcyjne opcjonalne.
- Przedrostek u z u, aby utworzyć ciąg znaków unicode.
- Działanie liczb całkowitych zawsze zwraca liczbę całkowitą – 5/2=2.
- Raw_input () odczytuje ciąg znaków.
- input() ocenia odczytane dane.
- generator .next().
Python 3
- drukuj nawiasy funkcyjne obowiązkowe.
- String unicode domyślnie.
- Działanie liczb całkowitych może dać w wyniku float – 5/2=2.5.
- Raw_input() niedostępne.
- Input zawsze czyta string.
- Next (generator).
- Py2 to py3 utility.
- Słowniki .keys() i .values() zwracają widok, a nie listę.
- Nie można już używać operatorów porównania na porównaniach innych niż naturalne.
Eg. None < None podniesie TypeError zamiast zwracać false. - Percent (%) operator formatowania łańcucha jest przestarzały użyj funkcji .format() lub konkatenacji.
Zobacz także: Top 5 IDE i edytorów kodu dla Pythona
Masz problemy?
Możesz napotkać błąd tu i tam, jeśli pracujesz w pythonie 2.x od jakiegoś czasu. To jest w porządku! Po prostu wygoogluj problem, jest prawie pewne, że ktoś inny też miał ten problem podczas migracji.