Latest web development tutorials

diferença python2.x com a versão 3 .x

3,0 versões do Python, muitas vezes referida como Python 3000, ou simplesmente Py3k. Com relação a uma versão anterior do Python, este é um grande upgrade.

A fim de não trazer muita carga, Python 3.0 não considera na concepção de compatibilidade com versões anteriores.

Para muitos programas destinados versões anteriores do Python não irá executar corretamente em Python 3.0.

A fim de cuidar do programa existente, Python 2.6 como uma versão provisória do 2.x do Python usando a sintaxe básica e bibliotecas, tendo em conta a migração para o Python 3.0 e Python 3.0 permite o uso de parte da sintaxe da função.

O novo programa é recomendado o uso Python 3.0 Python sintaxe versão.

A menos que o ambiente de execução não pode instalar o Python 3.0 ou o programa em si não suporta o uso de terceiros bibliotecas Python 3.0. Actualmente não suporta bibliotecas de terceiros Python 3.0 são Torcido, py2exe, PIL e similares.

A maioria das bibliotecas de terceiros estão tentando Python 3.0 versão compatível. Se não usar imediatamente Python 3.0, também recomendou o desenvolvimento de uma versão compatível Python 3.0 do programa, e em seguida, usar Python 2.6, Python 2.7 é executada.

Mudanças no Python 3.0 é principalmente nas seguintes áreas:


função de impressão

declaração de impressão é ido, substituído por uma função print (). Python 2.6 e Python 2.7 suporte em parte esta forma de sintaxe de impressão. Em Python 2.6 e Python 2.7 dentro, três formas são equivalentes:

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

No entanto, Python 2.6 tem realmente apoiar a sintaxe nova print ():

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

Unicode

Python 2 tiveram str ASCII () Tipo, unicode () sozinho, não tipo byte.

Agora, em Python 3, finalmente temos Unicode (UTF-8) de cordas e um byte classe: byte e bytearrays.

Porque Python3.X arquivo de origem padrão UTF-8, o que torna o código a seguir é legal:

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

2.x do Python

>>> 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'

3.x do Python

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

divisão

divisão Python em outras línguas que não o final muito alto, há um conjunto muito complexo de regras. Python na divisão com dois operadores e / //

Primeiro, ele / Divisão:

No python 2.x / divisão assim como a maioria de nós estão familiarizados com a linguagem, tais como Java ah ah C é semelhante aos resultados de uma divisão inteira foi um inteiro, a parte fracionária é completamente ignorado, a divisão decimal de ponto flutuante continuará a ser uma parte do get resultados número de ponto flutuante.

No 3.x python / divisão não fazê-lo, e para a divisão entre números inteiros, o resultado será um float.

2.x do Python:

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

3.x do Python:

>>> 1/2
0.5

Para // divisão, esta divisão é chamada divisão chão, o resultado será a divisão automaticamente uma operação de piso é o mesmo em 2.x do Python 3.x python in.

2.x do Python:

>>> -1 // 2
-1

3.x do Python:

>>> -1 // 2
-1

Note-se que não descarta a parte fracionária, mas para continuar a andar operação, se você quiser interceptar a parte fracionária, você precisa usar o módulo de função matemática trunc

3.x do Python:

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

anormal

Processamento em Python 3 é também muda ligeiramente anormais, em Python 3, nós agora usar como palavra-chave.

Sintaxe para a captura de exceçõesfeitas, exceto exc, var alterados, exceto exc como var.

Sintaxe, exceto (exc1, exc2) como var pode capturar exceções várias categorias. Python 2.6 tem suporte para sintaxe.

  • 1. era 2.x, todos os tipos de objetos que podem ser jogados diretamente na era 3.x, só herdou a partir de objetos BaseException podem ser lançadas.
  • 2. declaração 2.x raise lança uma vírgula para separar os tipos de objetos e parâmetros, 3.x cancelados esta formulação maravilhosa chamar diretamente o construtor lançará um objeto pode ser.

Na era 2.x, anomalias no código, além de que os erros processuais, mas também muitas vezes que algumas estruturas de controle comuns devem fazer, em 3.x pode ser visto, os designers fazer uma mudança anormal mais específico apenas em erro com a excepção do caso a fim de capturar declaração de manusear.


xrange

Criar iteração objeto no Python 2 no uso xrange () é muito popular. Por exemplo: para loop ou um compreensões lista / cobrança / dicionário.

Este desempenho é gerador própria imagem (por exemplo. "Avaliação preguiçosa"). Mas o xrange-iterable é infinito meios ilimitados que você pode atravessar.

Devido à sua avaliação preguiçosa, não só se você não pode atravessá-lo uma vez, xrange () faixa de relação function () mais rápido (por exemplo, para ciclos). No entanto, em comparação com uma iteração, iteração não é recomendado que você repete várias vezes, porque o gerador do zero cada vez.

Em Python 3, range () é como xrange (), de modo a conseguir uma função xrange específica () já não existe (em Python 3 xrange () lançará um nome de exceção).

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 representação literal

número Octal deve ser escrito 0o777, a forma original de 0777 não pode ser utilizado; devem ser escritos em 0b111 binário.

função adicionada uma bin () é usado para converter um número inteiro em uma string binária. Python 2.6 tem suporte para sintaxe.

Em Python 3.x, e octal literal apenas um caminho, que é 0o1000.

2.x python

>>> 0o1000
512
>>> 01000
512

3.x python

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

operadores de desigualdade

Python 2.x não significa, existem duas maneiras para escrever! = E <>

Python 3.x para soltar o <> Só! = Maneira de escrever, mas, felizmente, eu nunca usar <> dieta


Removido a expressão `` repr

Python 2.x entre aspas para trás `` função repr é equivalente ao papel de

Python 3.x para soltar o `` notação, permitida apenas a função repr, o propósito de fazê-lo é fazer com que o código parece mais claro isso? Mas sinto com a oportunidade de repr raramente, normalmente, apenas quando é utilizado na depuração, a maior parte do tempo ou usar a função str para uma cadeia descrevendo o objecto.

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

Uma pluralidade de módulos são renomeados (PEP8 acordo)

O antigo nome novo nome
_winreg winreg
ConfigParser ConfigParser
copy_reg copyreg
fila fila
SocketServer socketserver
repr reprlib

módulo StringIO agora está incorporado no novo módulo io. novos, md5, módulos gopherlib são excluídos. Python 2.6 tem suporte para o novo módulo io.

httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib ser incorporada no pacote de http.

Cancelar a declaração exec, apenas a função exec (). Python 2.6 tem apoio função exec ().


5. Tipos de Dados

1) Py3.X removido tipo longo, agora há apenas um --int inteiro, mas se comporta como uma versão 2.x do tempo

2) Adicionado bytes tipo correspondente à versão 2.X da série de oito, definir um método literal bytes é o seguinte:

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

objetos str e bytes objetos podem usar .encode () (str -> bytes) ou .decode () (bytes -> str) método em si.

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

3) dict de .Keys (),. Itens e .values ​​() retorna um iterador, enquanto os iterkeys anteriores () e outras funções são descartados. Ao mesmo tempo existe removido dict.has_key (), substitui-lo por nele.