- Operador de divisão
- função print
- Unicode
- xrange
- Manipulação de erros
- módulo _future_
Operador de divisão
Se estivermos portando nosso código ou executando o código python 3.x em python 2.x, pode ser perigoso se as alterações na divisão inteira passarem despercebidas (já que não gera nenhum erro). É preferível usar o um valor de ponto flutuante (como 7.0/5 ou 7/5.0) para obter o resultado esperado ao portar nosso código.
print 7 / 5 print -7 / 5
Saída:
Saída em Python 2.x 1 -2 Saída em Python 3.x : 1.4 -1.4 # Consulte o link abaixo para obter detalhes # https://www.geeksforgeeks.org/division-operator-in-python/
função print
Esta é a mudança mais conhecida. Nesse caso, a palavra-chave print
no Python 2.x é substituída pela função print()
no Python 3.x. No entanto, os parênteses funcionam no Python 2 se um espaço for adicionado após a palavra-chave print
porque o interpretador o avalia como uma expressão.
print 'Olá, Geeks' # Python 3.x não suporta print('Espero que você goste desses fatos')
Saída:
Saída em Python 2.x : Olá, Geeks Espero que você goste desses fatos Saída em Python 3.x : File "a.py", line 1 print 'Olá, Geeks' ^ SyntaxError: invalid syntax Consulte o link abaixo para obter detalhes https://www.geeksforgeeks.org/g-fact-25-print-single-multiple-variable-python/
Como podemos ver, se usarmos parênteses em python 2.x, não haverá problema, mas se não usarmos parênteses em python 3.x, obteremos SyntaxError
.
Unicode
No Python 2, o tipo de string implícito é ASCII. Mas no Python 3.x o tipo de string implícito é Unicode.
print(type('default string ')) print(type(b'string with b '))
Saída:
Saída em Python 2.x (Bytes é o mesmo que str) <type 'str'> <type 'str'> Output in Python 3.x (Bytes e str são diferentes) <class 'str'> <class 'bytes'>
Python 2.x também oferece suporte a Unicode
print(type('string padrão')) print(type(u'string com b '))
Saída:
Saída em Python 2.x (Unicode e str são diferentes) <type 'str'> <type 'unicode'> Saída em Python 3.x (Unicode e str são o mesmo) <class 'str'> <class 'str'>>
xrange
xrange()
do Python 2.x não existe no Python 3.x. No Python 2.x, range
retorna uma lista, ou seja, range(3)
retorna [0, 1, 2]
enquanto xrange
retorna um objeto xrange
i. e., xrange(3)
retorna um objeto iterador que funciona de forma semelhante ao iterador Java e gera um número quando necessário.
Se precisarmos iterar na mesma sequência várias vezes, preferimos range()
, pois range fornece uma lista estática. xrange()
reconstrói a sequência todas as vezes. xrange()
não oferece suporte a fatias e outros métodos de lista. A vantagem de xrange()
é que ele economiza memória quando a tarefa é iterar em um grande intervalo.
No Python 3.x, a função range agora faz o que xrange faz no Python 2.x, então, para manter nosso código portátil, podemos preferir usar range. Portanto, a função de intervalo do Python 3.x é xrange do Python 2.x.
for x in xrange(1, 5): print(x), for x in range(1, 5): print(x),
Saída:
Saída em Python 2.x 1 2 3 4 1 2 3 4 Saída em Python 3.x NameError: name 'xrange' is not defined
Manipulação de erros
Há uma pequena mudança no tratamento de erros em ambas as versões. No python 3.x, a palavra-chave "as
" é necessária.
try: trying_to_check_error except NameError, err: print err, 'Error Caused' # Não funcionaria em Python 3.x
Saída:
Saída em Python 2.x: name 'trying_to_check_error' is not defined Error Caused Saída em Python 3.x : File "a.py", line 3 except NameError, err: ^ SyntaxError: invalid syntax
try: trying_to_check_error except NameError as err: # 'as' é necessário em python 3.x print (err, 'Error Caused')
Saída:
Saída em Python 2.x: (NameError("name 'trying_to_check_error' is not defined",), 'Error Caused') Saída em Python 3.x : name 'trying_to_check_error' is not defined Error Caused
Módulo __future__
Basicamente, isso não é uma diferença entre as duas versões, mas é útil mencionar aqui. A ideia do módulo __future__
é ajudar a migrar para o Python 3.x.
Se estamos planejando ter suporte para Python 3.x em nosso código 2.x, podemos usar importe _future_
em nosso código.
Por exemplo, no código Python 2.x abaixo, usamos o comportamento de divisão de inteiro do Python 3.x usando o módulo __future__
.
# No código python 2.x abaixo, a divisão funciona # assim como em Python 3.x porque usamos __future__ from __future__ import division print 7 / 5 print -7 / 5
Saída:
1.4 -1.4
Outro exemplo em que usamos colchetes no Python 2.x usando o módulo __future__
:
from __future__ import print_function print('Acervo Lima')
Saída:
Acervo Lima
Consulte isso para obter mais detalhes do módulo __future__
.
Traduzido por Acervo Lima de Important differences between Python 2.x and Python 3.x with examples
Artigo escrito por priteshkanani, lalitshankarch
0 comentários:
Postar um comentário