Latest web development tutorials

Różnica Python2.x z wersji 3 .x

3,0 wersje Pythona, często określane jako Python 3000, lub po prostu Py3k. W stosunku do wcześniejszej wersji Pythona, jest to ważne uaktualnienie.

Aby nie doprowadzić do zbyt dużego obciążenia, Python 3.0 nie bierze pod uwagę przy projektowaniu kompatybilność w dół.

Przez wiele programów mających na wcześniejsze wersje Pythona nie będzie działać poprawnie na Python 3.0.

Aby zadbać istniejącego programu, Python 2.6 jako tymczasowego wersji 2.x Python przy użyciu podstawowych składni i biblioteki, z uwzględnieniem migracji do Pythona 3.0 i Python 3.0 pozwala na wykorzystanie części składni funkcji.

Nowy program zaleca się stosowanie składni Pythona 3.0 wersji Pythona.

Chyba że środowisko wykonania nie można zainstalować Python 3.0 lub sam program nie obsługuje wykorzystanie strony trzeciej bibliotek Pythona 3.0. Obecnie nie obsługuje biblioteki innych firm Python 3.0 są skręcone, py2exe, PIL i tym podobne.

Większość bibliotek innych firm próbują Python 3.0 w wersji kompatybilnej. Jeśli nie od razu użyć Pythona 3.0, również zalecane rozwój zgodny Python 3.0 wersji programu, a następnie użyć Pythona 2.6, Python 2.7 jest wykonywana.

Zmiany w Pythonie 3.0 jest głównie w następujących obszarach:


funkcja drukowania

Instrukcja print znika, zastąpiony przez wydruku function (). Python Python 2.6 i 2.7 Wsparcie w ramach tej formy składni druku. W Pythonie 2.6 i 2.7 Pythona wewnątrz trzy formy są równoważne:

print "fish"
print ("fish") #注意print后面有个空格
print("fish") #print()不能带有任何其它参数

Jednakże, Python 2.6 faktycznie wspierać składni nowego print ():

from __future__ import print_function
print("fish", "panda", sep=', ')

Unicode

Python 2 miał ASCII str () typ, Unicode (), a nie sam typ bajtów.

Teraz w Pythonie 3, mamy wreszcie Unicode (UTF-8) oraz ciąg bajtów Klasa: bajt i bytearrays.

Ponieważ Python3.X domyślny plik źródłowy kodowanie UTF-8, co sprawia, że ​​podany kod jest legalne:

>>> 中国 = 'china' 
>>>print(中国) 
china

Python 2.x

>>> str = "我爱北京天安门"
>>> str
'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'
>>> str = u"我爱北京天安门"
>>> str
u'\u6211\u7231\u5317\u4eac\u5929\u5b89\u95e8'

Python 3.x

>>> str = "我爱北京天安门"
>>> str
'我爱北京天安门'

podział

Podział Python w innych językach niż bardzo wysokim końcu jest bardzo skomplikowany zestaw reguł. Python w dziale z dwoma operatorami i / //

Po pierwsze, / Wydział:

W python 2.x / podziału, podobnie jak większość z nas zna języka, takich jak Java ah ah C jest zbliżona do wyników z podziałem całkowitej był liczbą całkowitą, część ułamkowa jest całkowicie ignorowany, dziesiętne zmiennoprzecinkowe podział pozostanie częścią get wyniki liczba zmiennoprzecinkowa.

W Pythona 3.x / podział nie jest już to zrobić, a do podziału między całkowitymi, wynik będzie unosić.

Python 2.x:

>>> 1 / 2
0
>>> 1.0 / 2.0
0.5

Python 3.x:

>>> 1/2
0.5

Dla // podział, podział ten jest nazywany podziałem piętro, wynik będzie podział automatycznie operacja podłoga jest taka sama w Pythonie 2.x oraz 3.x Pythona w.

Python 2.x:

>>> -1 // 2
-1

Python 3.x:

>>> -1 // 2
-1

Zauważ, że nie odrzucić część ułamkową, ale do przeprowadzenia operacji na podłodze, jeśli chcesz przechwycić część ułamkową, trzeba użyć modułu funkcji matematyka Trunc

Python 3.x:

>>> import math
>>> math.trunc(1 / 2)
0
>>> math.trunc(-1 / 2)
0

nienormalny

Przetwarzanie w Pythonie 3, jest również nieco anormalne zmiany w Pythonie 3, możemy teraz używać jako słowa kluczowego.

Składnia do połowu wyjątkiwyjątkiem EXC, var zmienił wyjątkiem EXC jako var.

Składnia wyjątkiem (exc1, exc2) jako var może przechwytywać wyjątki wiele kategorii. Python 2.6 posiada wsparcie zarówno dla składni.

  • 1. era 2.x są wszystkie typy obiektów, które mogą być wyrzucane bezpośrednio w epoce 3.x tylko odziedziczone obiektów BaseException mogą być wyrzucane.
  • 2. oświadczenie 2.x podbicie rzuca przecinka do oddzielnych typów obiektów i parametrów, 3.x odwołanych tego wspaniałego brzmienia bezpośrednio wywołać konstruktor rzuca obiekt może być.

W dobie 2.x, anomalie w kodzie Poza tym błędów proceduralnych, ale także często mają pewne wspólne struktury kontrolne powinny zrobić w 3.x można zauważyć, projektanci dokonać bardziej szczegółowych anormalne zmiany tylko w wyniku błędu z wyjątkiem przypadku, w celu złapać oświadczenie w obsłudze.


XRange

Tworzenie iteracji obiektu w Pythonie 2 w XRange () użycie jest bardzo popularne. Na przykład: dla pętli lub listowe / Lista Collection / Dictionary.

Ten występ jest generator sam obraz (np. "Lazy oceny"). Ale XRange-iterable jest nieskończony, nieograniczony oznacza, że ​​można przemieszczenia.

Ze względu na swoje leniwe oceny, a nie tylko wtedy, gdy nie można przemierzać go raz, XRange () Zakres stosunek function () szybciej (np cykli). Niemniej jednak, w porównaniu do jednej iteracji, iteracja nie zaleca się powtórzyć kilka razy, ponieważ generatora od nowa za każdym razem.

W Pythonie 3, zakres () jest jak xrange () tak, aby osiągnąć funkcja specyficzna XRange () już nie istnieje (w Pythonie 3 XRange () wygeneruje nazwę wyjątku).

import timeit

n = 10000
def test_range(n):
    return for i in range(n):
        pass

def test_xrange(n):
    for i in xrange(n):
        pass   

Python 2

print 'Python', python_version()

print '\ntiming range()' 
%timeit test_range(n)

print '\n\ntiming xrange()' 
%timeit test_xrange(n)

Python 2.7.6

timing range()
1000 loops, best of 3: 433 µs per loop


timing xrange()
1000 loops, best of 3: 350 µs per loop

Python 3

print('Python', python_version())

print('\ntiming range()')
%timeit test_range(n)

Python 3.4.1

timing range()
1000 loops, best of 3: 520 µs per loop
print(xrange(10))
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-5-5d8f9b79ea70> in <module>()
----> 1 print(xrange(10))

NameError: name 'xrange' is not defined

Ósemkowy dosłowna reprezentacja

liczba ósemkowa musi być napisana 0o777, oryginalna forma 0777 nie może być używany, musi być napisana w 0b111 binarnym.

Dodano funkcję kosza () służy do konwersji liczby całkowitej na ciąg binarny. Python 2.6 posiada wsparcie zarówno dla składni.

W Pythonie 3.x i ósemkowej dosłownym tylko w jedną stronę, to znaczy 0o1000.

Python 2.x

>>> 0o1000
512
>>> 01000
512

Python 3.x

>>> 01000
  File "<stdin>", line 1
    01000
        ^
SyntaxError: invalid token
>>> 0o1000
512

operatorzy nierówności

Python 2.x nie znaczy, że są dwa sposoby na piśmie! = I <>

Python 3.x upuścić <> tylko! = Way to pisać, ale na szczęście, nigdy nie używam <> dieta


Usunięto wyraz `` repr

Python 2.x w cudzysłowie tylnych `funkcji repr jest równoznaczne z roli

Python 3.x upuścić `` notacji, pozostawiono tylko repr funkcji, cel ten sposób jest, aby kod wygląda bardziej jasne, prawda? Ale czuję się z możliwością Repr rzadko, zazwyczaj tylko wtedy, gdy jest on stosowany w debugowania, przez większość czasu lub wykorzystać funkcję STR ciąg opisujący przedmiot.

def sendMail(from_: str, to: str, title: str, body: str) -> bool:
    pass

Wiele modułów są zmieniane (PEP8 zależności)

Stara nazwa Nowa nazwa
_winreg winreg
ConfigParser ConfigParser
copy_reg copyreg
kolejka kolejka
SocketServer socketserver
repr reprlib

Moduł StringIO jest teraz włączone do nowego modułu IO. Nowe, md5, moduły gopherlib zostaną usunięte. Python 2.6 posiada wsparcie dla nowego modułu IO.

httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib zostać włączone do pakietu http.

Anuluj exec tylko funkcja exec (). Python 2.6 ma wsparcie funkcji exec ().


5. Typy danych

1) Py3.X usunięty długi typ, obecnie istnieje tylko jedna liczba całkowita --int, ale zachowuje się jak wersja 2.x długa

2) Dodane bajty typu odpowiadającego 2.x serii ośmiu, określa bajtów dosłownym metoda jest następująca:

>>> b = b'china' 
>>> type(b) 
<type 'bytes'> 

obiekty ul i bajty obiekty mogą korzystać .encode () (str -> bajtów) lub .decode () (bajtów -> str) Metoda na siebie.

>>> s = b.decode() 
>>> s 
'china' 
>>> b1 = s.encode() 
>>> b1 
b'china' 

3) DICT z .keys (). Przedmioty i .values ​​() zwraca iterator, podczas gdy w poprzednich iterkeys () i inne funkcje są odrzucane. Jednocześnie nie usunięto dict.has_key (), należy ją wymienić w nim.