O que há de novo no Python 3

O módulo __future__

Python 3.x introduziu algumas palavras-chave e recursos incompatíveis com Python 2 que podem ser importados por meio do módulo __future__ integrado no Python 2. É recomendado usar importações __future__, se você estiver planejando suporte Python 3.x para seu código.

Por exemplo, se quisermos o comportamento da divisão inteira do Python 3.x no Python 2, adicione a seguinte instrução de importação.

from __future__ import division

A função de impressão

A mudança mais notável e mais amplamente conhecida no Python 3 é como o printfunção é usada. O uso de parênteses () com a função de impressão agora é obrigatório. Era opcional no Python 2.

print "Hello World" #is acceptable in Python 2
print ("Hello World") # in Python 3, print must be followed by ()

A função print () insere uma nova linha no final, por padrão. No Python 2, ele pode ser suprimido colocando ',' no final. No Python 3, "end = ''" acrescenta espaço em vez de nova linha.

print x,           # Trailing comma suppresses newline in Python 2
print(x, end=" ")  # Appends a space instead of a newline in Python 3

Lendo entrada do teclado

Python 2 tem duas versões de funções de entrada, input() e raw_input(). A função input () trata os dados recebidos como string se estiverem incluídos entre aspas '' ou "", caso contrário, os dados são tratados como um número.

No Python 3, a função raw_input () está obsoleta. Além disso, os dados recebidos são sempre tratados como string.

In Python 2

>>> x = input('something:') 
something:10 #entered data is treated as number
>>> x
10

>>> x = input('something:')
something:'10' #entered data is treated as string
>>> x
'10'

>>> x = raw_input("something:")
something:10 #entered data is treated as string even without ''
>>> x
'10'

>>> x = raw_input("something:")
something:'10' #entered data treated as string including ''
>>> x
"'10'"

In Python 3

>>> x = input("something:")
something:10
>>> x
'10'

>>> x = input("something:")
something:'10' #entered data treated as string with or without ''
>>> x
"'10'"

>>> x = raw_input("something:") # will result NameError
Traceback (most recent call last):
   File "<pyshell#3>", line 1, in 
  <module>
   x = raw_input("something:")
NameError: name 'raw_input' is not defined

Divisão Inteira

No Python 2, o resultado da divisão de dois inteiros é arredondado para o inteiro mais próximo. Como resultado, 3/2 mostrará 1. Para obter uma divisão de ponto flutuante, o numerador ou denominador deve ser explicitamente usado como flutuante. Portanto, 3,0 / 2 ou 3 / 2,0 ou 3,0 / 2,0 resultará em 1,5

Python 3 avalia 3/2 como 1.5 por padrão, o que é mais intuitivo para novos programadores.

Representação Unicode

O Python 2 requer que você marque uma string com au se quiser armazená-la como Unicode.

O Python 3 armazena strings como Unicode, por padrão. Temos strings Unicode (utf-8) e classes de 2 bytes: byte e matrizes de bytes.

Função xrange () removida

No Python 2, range () retorna uma lista, e xrange () retorna um objeto que irá gerar apenas os itens no intervalo quando necessário, economizando memória.

No Python 3, a função range () foi removida e xrange () foi renomeado como range (). Além disso, o objeto range () oferece suporte ao fatiamento no Python 3.2 e posterior.

levantar exceção

Python 2 aceita ambas as notações, a sintaxe 'antiga' e a 'nova'; Python 3 levanta um SyntaxError se não colocarmos o argumento de exceção entre parênteses.

raise IOError, "file error" #This is accepted in Python 2
raise IOError("file error") #This is also accepted in Python 2
raise IOError, "file error" #syntax error is raised in Python 3
raise IOError("file error") #this is the recommended syntax in Python 3

Argumentos em exceções

No Python 3, os argumentos para exceção devem ser declarados com a palavra-chave 'as'.

except Myerror, err: # In Python2
except Myerror as err: #In Python 3

Função next () e Método .next ()

No Python 2, next () como método de objeto gerador é permitido. No Python 2, a função next (), para iterar sobre o objeto gerador, também é aceita. No Python 3, no entanto, next (0 como método gerador é descontinuado e aumentaAttributeError.

gen = (letter for letter in 'Hello World') # creates generator object
next(my_generator) #allowed in Python 2 and Python 3
my_generator.next() #allowed in Python 2. raises AttributeError in Python 3

Utilitário 2to3

Junto com o interpretador Python 3, o script 2to3.py geralmente é instalado na pasta tools / scripts. Ele lê o código-fonte do Python 2.x e aplica uma série de fixadores para transformá-lo em um código Python 3.x válido.

Here is a sample Python 2 code (area.py):

def area(x,y = 3.14): 
   a = y*x*x
   print a
   return a

a = area(10)
print "area",a

To convert into Python 3 version:

$2to3 -w area.py

Converted code :

def area(x,y = 3.14): # formal parameters
   a = y*x*x
   print (a)
   return a

a = area(10)
print("area",a)