Latest web development tutorials

differenza python2.X con la versione 3 .x

3.0 versioni di Python, spesso definito come Python 3000, o semplicemente Py3k. Per quanto riguarda una versione precedente di Python, questo è un importante aggiornamento.

Al fine di non portare troppi oneri, Python 3.0 non considera nella progettazione di compatibilità verso il basso.

Per molti programmi precedenti versioni progettate di Python non funzionare correttamente su Python 3.0.

Al fine di prendersi cura del programma esistente, Python 2.6 come una versione intermedia del 2.x Python utilizzando la sintassi di base e le librerie, tenendo conto della migrazione a Python 3.0 e Python 3.0 consente l'utilizzo di parte della sintassi della funzione.

Il nuovo programma si consiglia di utilizzare Python 3.0 versione di Python sintassi.

A meno che l'ambiente di esecuzione non è possibile installare Python 3.0 o il programma stesso non supporta l'uso di terze parti librerie Python 3.0. Attualmente non supporta le librerie di terze parti di Python 3.0 sono intrecciati, py2exe, PIL e simili.

La maggior parte delle librerie di terze parti stanno cercando di Python 3.0 versione compatibile. Se non utilizzare immediatamente Python 3.0, consigliato anche lo sviluppo della versione compatibile Python 3.0 del programma, e quindi utilizzare Python 2.6, Python 2.7 viene eseguita.

Le variazioni di Python 3.0 è principalmente nei seguenti settori:


funzione di stampa

istruzione di stampa è sparito, sostituito da una funzione print (). Python 2.6 e Python 2.7 il supporto in parte questa forma di sintassi di stampa. In Python 2.6 e Python 2.7 all'interno, tre forme sono equivalenti:

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

Tuttavia, Python 2.6 ha effettivamente sostenere la sintassi nuova stampa ():

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

Unicode

Python 2 aveva ASCII str () tipo, unicode () da solo, non è il tipo di byte.

Ora, in Python 3, finalmente abbiamo Unicode (UTF-8) corda e un byte di classe: di byte e bytearrays.

Perché Python3.X file sorgente di default codifica UTF-8, il che rende il seguente codice è legale:

>>> 中国 = '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
'我爱北京天安门'

divisione

divisione Python in lingue diverse dalla fine molto alto, vi è un insieme molto complesso di regole. Python nella divisione con due operatori, e / //

In primo luogo, / Divisione:

Nel Python 2.x / divisione, proprio come la maggior parte di noi hanno familiarità con la lingua, come Java ah ah C è simile ai risultati di una divisione intera è un numero intero, la parte frazionaria è completamente ignorato, decimali divisione in virgola mobile rimarrà una parte della get risultati numero a virgola mobile.

Nella 3.x pitone / divisione non è più lo fanno, e per la divisione tra numeri interi, il risultato sarà un galleggiante.

Python 2.x:

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

Python 3.x:

>>> 1/2
0.5

Per // divisione, questa divisione è chiamata divisione piano, il risultato della divisione verrà automaticamente un'operazione piano è lo stesso in pitone 2.xe 3.x pitone in.

python 2.x:

>>> -1 // 2
-1

python 3.x:

>>> -1 // 2
-1

Si noti che non scartare la parte frazionaria, ma per portare a terra operazione, se si vuole intercettare la parte frazionaria, è necessario utilizzare il modulo funzione matematica trunc

python 3.x:

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

anormale

Elaborazione in Python 3 è anche un po 'anomali cambiamenti, in Python 3, ora usiamo come parola chiave.

Sintassi per la cattura di eccezioni fatteeccezione exc, var exccambiato,se non come var.

Sintassi eccezione (EXC1, EXC2) come var può intercettare le eccezioni più categorie. Python 2.6 e 'dotato sia sintassi.

  • 1. 2.x epoca, sono tutti i tipi di oggetti che possono essere gettati direttamente in epoca 3.x, solo ereditati da oggetti BaseException possono essere gettati.
  • 2. dichiarazione 2.x raise getta una virgola di tipi diversi di oggetti e parametri, 3.x annullato questa meravigliosa formulazione direttamente chiamare il costruttore lancia un oggetto può essere.

In epoca 2.x, anomalie nel codice, oltre a che gli errori procedurali, ma anche spesso alcune strutture di controllo comuni dovrebbero fare, in 3.x può essere visto, i progettisti fanno una più specifica variazioni anomale solo per errore con l'eccezione del caso in modo da catturare economico da gestire.


xrange

Creare iterazione oggetto in Python 2 in uso xrange () è molto popolare. Per esempio: per il ciclo o una lista / raccolta / dizionario comprensioni.

Questa performance è molto generatore di immagini (ad es. "Valutazione pigro"). Ma il xrange-iterabile è infinito, mezzi senza limiti che si può attraversare.

A causa della sua valutazione pigra, non solo se non è possibile attraversare una volta, xrange () gamma di rapporti function () più veloce (ad esempio, per i cicli). Tuttavia, rispetto a una iterazione, iterazione è raccomandato di ripetere più volte, in quanto il generatore da zero ogni volta.

In Python 3, range () è come xrange () in modo da realizzare una funzione specifica xrange () non esiste più (in Python 3 xrange () lancerà un nome di eccezione).

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

rappresentazione letterale ottale

numero ottale deve essere scritto 0o777, la forma originale del 0777 non possono essere utilizzati; deve essere scritto in 0b111 binario.

Aggiunta funzione un bidone () viene utilizzata per convertire un intero in una stringa binaria. Python 2.6 e 'dotato sia sintassi.

In Python 3.x, e ottale letterale solo modo, cioè 0o1000.

python 2.x

>>> 0o1000
512
>>> 01000
512

python 3.x

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

gli operatori di disuguaglianza

Python 2.x non significa che ci sono due modi per la scrittura! = E <>

Python 3.x far cadere il solo <>! = Modo di scrivere, ma per fortuna, non ho mai usare <> dieta


Rimosso l'espressione `` repr

Python 2.x tra virgolette schiena `` funzione repr è equivalente al ruolo di

Python 3.x far cadere il `` notazione, ammesso solo la funzione repr, scopo di farlo è quello di rendere il codice appare più chiaro vero? Ma ritengo con la possibilità di repr raramente, di solito solo quando viene utilizzato in debug maggior parte del tempo o utilizzare la funzione str ad una stringa che descrive l'oggetto.

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

Una pluralità di moduli vengono rinominati (PEP8 secondo)

Il vecchio nome Nuovo nome
_winreg winreg
ConfigParser ConfigParser
copy_reg copyreg
coda coda
SocketServer SocketServer
repr reprlib

modulo StringIO è ora inserito nel nuovo modulo io. nuovi, MD5, moduli gopherlib vengono eliminate. Python 2.6 ha il supporto per il nuovo modulo io.

httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib essere incorporato nel pacchetto http.

Annulla la dichiarazione exec, solo la funzione exec (). Python 2.6 ha funzione di sostegno exec ().


5. Tipi di dati

1) Py3.X rimosso tipo lungo, vi sola --int intero, ma si comporta come una versione 2.X della lunga

2) Aggiunto byte digitare corrispondente alla versione 2.X di otto serie, definire un metodo letterale byte è il seguente:

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

oggetti str e byte oggetti possono usare .encode () (str -> bytes) o .decode () (byte -> str) Metodo gli uni negli altri.

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

3) dict di .keys (),. Articoli e .values ​​() restituisce un iteratore, mentre i iterkeys precedenti () e altre funzioni vengono scartati. Allo stesso tempo, c'è rimosso dict.has_key (), sostituirlo con in esso.