Latest web development tutorials

différence python2.X avec la version 3 .x

3.0 versions de Python, souvent désigné comme Python 3000, ou tout simplement Py3K. En ce qui concerne une version antérieure de Python, ceci est une mise à jour majeure.

Afin de ne pas porter un fardeau trop lourd, Python 3.0 ne tient pas compte dans la conception de la compatibilité descendante.

Pour de nombreux programmes conçus versions antérieures de Python ne fonctionneront pas correctement sur Python 3.0.

Afin de prendre soin du programme existant, Python 2.6 comme une version provisoire de la 2.x Python en utilisant la syntaxe de base et les bibliothèques, en tenant compte de la migration vers Python 3.0 et Python 3.0 permet l'utilisation d'une partie de la syntaxe de la fonction.

Le nouveau programme est recommandé d'utiliser Python 3.0 syntaxe de la version Python.

À moins que l'environnement d'exécution ne peut pas installer Python 3.0 ou le programme lui-même ne prend pas en charge l'utilisation de tiers bibliothèques Python 3.0. Actuellement ne supporte pas les bibliothèques tierces Python 3.0 sont Twisted, py2exe, PIL et autres.

La plupart des bibliothèques tierces tentent de Python 3.0 version compatible. Si pas utiliser immédiatement Python 3.0, a également recommandé le développement de la version compatible Python 3.0 du programme, puis utilisez Python 2.6, Python 2.7 est réalisée.

Les changements dans Python 3.0 est principalement dans les domaines suivants:


fonction d'impression

déclaration d'impression a disparu, remplacée par une fonction d'impression (). Python 2.6 et Python 2.7 support en partie cette forme de syntaxe d'impression. En Python 2.6 et Python 2.7 à l'intérieur, trois formes sont équivalentes:

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

Cependant, Python 2.6 a effectivement en charge la syntaxe nouvelle print ():

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

Unicode

Python 2 avait ASCII str () type unicode () seul, pas le type d'octets.

Maintenant, en Python 3, nous avons enfin Unicode (UTF-8) string et une classe octet: octet et bytearrays.

Parce que Python3.X fichier source par défaut encodage UTF-8, ce qui rend le code suivant est légal:

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

division

division Python dans d'autres langues que le très haut de gamme, il existe un ensemble très complexe de règles. Python dans la division avec deux opérateurs, et / //

Tout d'abord, il / Division:

Dans le python 2.x / division, tout comme la plupart d'entre nous sont familiers avec la langue, tels que Java ah ah C est similaire aux résultats d'une division entière a été un nombre entier, la partie fractionnaire est complètement ignorée, à virgule flottante division point restera une partie de la get résultats nombre à virgule flottante.

Dans le 3.x python / division plus le faire, et pour la division entre les nombres entiers, le résultat sera un flotteur.

Python 2.x:

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

Python 3.x:

>>> 1/2
0.5

Pour // division, cette division est appelée division de plancher, le résultat sera la division automatiquement une opération au sol est le même en python 2.x et 3.x python dans.

python 2.x:

>>> -1 // 2
-1

python 3.x:

>>> -1 // 2
-1

Notez que pas jeter la partie fractionnaire, mais à transporter sur le plancher de l'opération, si vous voulez intercepter la partie fractionnaire, vous devez utiliser les mathématiques module de fonction trunc

python 3.x:

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

anormal

Traitement en Python 3 est aussi change légèrement anormales, en Python 3, nous utilisons maintenant comme un mot-clé.

Syntaxe pour la capture d' exceptions faites ,sauf exc, var changé sauf exc que var.

Syntaxe sauf (exc1, EXC2) comme var peut attraper des exceptions multiples catégories. Python 2.6 a un support à la fois la syntaxe.

  • 1. 2.x époque, sont tous les types d'objets qui peuvent être jetés directement dans l'ère 3.x, seulement hérité des objets BaseException peuvent être jetés.
  • 2. Déclaration 2.x augmentation jette une virgule à des types distincts d'objets et de paramètres, 3.x annulé ce merveilleux libellé appeler directement le constructeur lance un objet peut être.

Dans l'ère 2.x, anomalies dans le code en plus que des erreurs de procédure, mais aussi, souvent, ne certaines structures de contrôle communes devraient faire en 3.x on peut le voir, les concepteurs font un changement anormal plus spécifique que par erreur à l'exception de l'affaire afin de rattraper la déclaration à manipuler.


xrange

Créer itération objet en Python 2 xrange () l'utilisation est très populaire. Par exemple: boucle ou une liste / collecte / dictionnaire compréhensions.

Cette performance est générateur d'image très (par ex. "Évaluation Lazy"). Mais le xrange-iterable est infini, des moyens illimités que vous pouvez parcourir.

En raison de son évaluation paresseuse, non seulement si vous ne pouvez pas traverser une fois, xrange () plage de rapports de fonction () plus rapide (par exemple pour cycles). Néanmoins, par rapport à une itération, l'itération est pas recommandé de répéter plusieurs fois, parce que le générateur à partir de zéro à chaque fois.

En Python 3, range () est comme xrange () de manière à obtenir une fonction xrange spécifique () n'existe plus (En Python 3 xrange () va jeter un nom d'exception).

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

Octal représentation littérale

Numéro Octal doit être écrit 0o777, la forme originale de 0777 ne peut pas être utilisé, doit être écrit en 0b111 binaire.

Ajout de la fonction d'un bac () est utilisé pour convertir un entier en une chaîne binaire. Python 2.6 a un support à la fois la syntaxe.

En Python 3.x et octal littéral qu'un seul moyen, qui est 0o1000.

python 2.x

>>> 0o1000
512
>>> 01000
512

python 3.x

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

opérateurs d'inégalité

Python 2.x ne signifie pas qu'il ya deux façons d'écrire! = Et <>

Python 3.x faire tomber le <> Seulement! = Way à écrire, mais heureusement, je ne jamais utiliser <> alimentation


Suppression de l'expression `` rééd

Python 2.x guillemets arrière `` fonction rééd est équivalent au rôle de

Python 3.x de laisser tomber la `` notation, a permis la seule fonction rééd, le but de le faire est de rendre le code semble plus clair, il? Mais je me sens à l'occasion de repr rarement, en général seulement quand il est utilisé dans le débogage, la plupart du temps ou utiliser la fonction str à une chaîne de caractères décrivant l'objet.

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

Une pluralité de modules sont renommés (selon pep8)

L'ancien nom Nouveau nom
_winreg winreg
ConfigParser ConfigParser
copy_reg copyreg
file file
SocketServer SocketServer
rééd reprlib

Module StringIO est maintenant intégré dans le nouveau module io. nouveaux md5, modules de gopherlib sont supprimés. Python 2.6 a un support pour le nouveau module io.

httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib être incorporé dans le paquet http.

Annuler l'instruction exec, seule la fonction exec (). Python 2.6 a une fonction support exec ().


5. Types de données

1) Py3.X enlevé type long, maintenant il n'y a qu'un seul --int entier, mais il se comporte comme une version 2.X de la longue

2) Ajout d'octets de type correspondant à la version 2.X de la série de huit, définir une méthode littérale d'octets est la suivante:

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

objets str et octets objets peuvent utiliser .encode () (str -> octets) ou .decode () (octets -> str) Méthode dans l'autre.

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

3) dict de .keys (),. Éléments et .values ​​() retourne un itérateur, alors que les iterkeys précédentes () et d'autres fonctions sont rejetées. Dans le même temps il supprimé dict.has_key (), remplacez-le par en elle.