SlideShare a Scribd company logo
1 of 16
Download to read offline
Osvaldo Santana Neto
 osvaldo.santana@indt.org.br
Disclaimer
 Antes de montar essa apresentação o próprio GvR fez uma
 apresentação sobre Python-3000
   Apresentação focada nas mudanças
   http://www.python.org/doc/essays/ppt/accu2006/Py3kACCU.ppt
 Essa apresentação foca na preparação para a migração
Python 3000
 Python 3000 == Py3k == Python 3.0
 Não vai ser uma nova linguagem!
 A idéia principal:
   Corrigir erros do passado!
 Compatibilidade retroativa não será uma preocupação
   Código feito para Python certamente vai quebrar
 Funcionalidades interessantes poderão ser adicionadas
   Aquelas que certamente causariam quebra de compatibilidade
   Se não quebra compatibilidade podem ser adicionadas ainda na
   série 2.x
Quando?
 Neste momento está sendo discutido o processo de
 desenvolvimento do Py3k.
 Cuidados especiais:
   Não transformar o Py3k no novo Perl6
   Rejeitar propostas inviáveis rapidamente para não desperdiçar
   tempo
 Cronograma prévio:
   Primeiro Alpha: não menos de 1 ano
   Primeiro Beta: provavelmente um ano depois do Alpha
   Releases 3.1, 3.2, ... lançados imediatamente após
PEPs 3000
 PEP 3000 – Python 3000
 PEP 3001 – Revisão e melhoria da biblioteca padrão
 PEP 3003 – Como lidar com mudança que causa
 incompatibilidade
 PEP 3099 – O que não vão mudar
 PEP 3100 – Lista de mudanças que serão avaliadas
   Algumas mudanças já são praticamente certas
 PEP 3101 – Formatação avançada de strings
   Porque isso está aqui? Não poderia ser adicionado no Python 2.x?
   Sintaxe muito semelhante à usada no C#
 PEP 3102 – Parâmetro obrigatoriamente passado por
 keyword
E o Python 2?
 Continua o desenvolvimento!
 Será mantido até que o Python 3 tenha atingido um alto
 grau de maturidade
   Funcionalidades do Py3k serão aplicadas à versão 2 sempre que
   possível
 Plano de releases cobre as versões 2.6, 2.7, 2.8 e 2.9
 Mais informações na PEP 3000
Incompatibilidade?
 Uma visão geral das incompatibilidades
 previstas:
   Novas keywords poderão ser criadas
   dict.keys(), range(), zip() retornarão iteradores (e
   métodos complementares a esses, que retornam
   iteradores, sumirão)
   Todas as strings serão Unicode
   Redesenho do sistema de I/O
   Remoção de funções builtin substituíveis por list
   compreensions
   Funcionalidades deprecated removidas
     ● ex. Old-style classes
Apoio na migração
 Ferramentas serão criadas para ajudar na migração
   Scripts para conversão (sempre que possível)
   Será possível ligar warnings para código incompatível com o
   py3k no Python 2
   Facilidade de migração é um fator levado em alta consideração no
   processo da criação do Py3k
   Ferramentas como pychecker poderão avisar quando algo pode
   apresentar problema de compatibilidade
 Mais informações nas PEPs 3003, 3099, 3100
Evitando problemas futuros
 Já é possível se prevenir de problemas de compatibilidade
 com o Python 3 desde já
 Muitas dicas podem não servir para nada futuramente :)
Dicas Genéricas
 Repetindo: evite construções que já estão marcadas como
 candidatas à 'morte'.
 Sempre que precisar usá-las lembre-se de sinalizar o
 trecho onde isso ocorre
 Evite alguns nomes de variáveis que possam se tornar
 palavras reservadas (ex. preposições em inglês como “as”)
 List comprehensions e Generator Expressions são suas
 amigas, use-as!
Linguagem
 Fuja do comando exec
   Sumirá na forma de comando. Talvez se torne uma função
 Comando print
   Passará a ser uma função
   Evite usar a sintaxe “>>xx”, prefira usar xx.write()
   Evite usar “,” para suprimir a quebra de linha (ex. print
    “spam”,)
 Use != no lugar de <>
 Evite exceções string
 Use raise Exception(“spam”) no lugar de raise Exception,
 “spam”
Linguagem
 Use repr(x) no lugar de `x`
 Use o operador in no lugar de dict.has_key()
 Cuidado com funções que retornam lists, elas podem
 começar a retornar iterators
 Use inteiro1//inteiro2 no lugar de inteiro1/inteiro2
 Remova tudo o que emite “DeprecationWarning”
Old-style Classes
 Todas as classes serão do tipo new-style, mesmo aquelas
 que não herdam de object
 Mas as que herdam de object continuarão sendo new-
 style classes, logo, desde hoje tente fazer: class
 Spam(object): ... no lugar de class Spam: ...
 Não está claro ainda se os métodos __(get|set)attr__
 desaparecerão (já que em new-style classes é preferível
 usar __(get|set)attribute__)
   Minha suspeita é a de que não desaparecerão por se tratarem de
   métodos usados com propósitos ligeiramente diferentes
Builtins
 Saem:
   apply() -> f(*args, **kw)
   buffer()
   callable() -> try/except
   compile() -> passa para o módulo sys
   coerce()
   execfile(), reload() -> exec()
   input() -> eval(sys.stdin.readline())
   id() -> passa para o módulo sys
   intern() -> passa para o módulo sys
   map(), filter() -> list comprehension
   raw_input() -> sys.stdin.readline()
   xrange() -> range()
Builtins
 Surgem:
   exec() -> comando exec
   print() -> comando print
   byte() -> antiga classe 'str'
 Mudam:
   range(), zip() -> iterator no lugar de list
   min(), max(), sum() -> tratarão iterators
   Hierarquia das exceptions
Acompanhe o desenvolvimento
 Leias as PEPs 3000
   http://www.python.org/peps/
 Assine a lista: python-3000@python.org
   http://www.python.org/mailman/listinfo/
 Acompanhe o blog do GvR
   http://artima.com/weblogs/

More Related Content

What's hot

Nada sobre JavaScript
Nada sobre JavaScriptNada sobre JavaScript
Nada sobre JavaScriptLuis Vendrame
 
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)Sidney Roberto
 
Programação Concorrente - Aula 05
Programação Concorrente - Aula 05Programação Concorrente - Aula 05
Programação Concorrente - Aula 05thomasdacosta
 
Testes de Software - Módulo 3
Testes de Software - Módulo 3Testes de Software - Módulo 3
Testes de Software - Módulo 3Rodrigo Paes
 
Java básico - Módulo 04: Estruturas de controle
Java   básico - Módulo 04:  Estruturas de controleJava   básico - Módulo 04:  Estruturas de controle
Java básico - Módulo 04: Estruturas de controleProfessor Samuel Ribeiro
 
Testes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de códigoTestes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de códigoPaula Grangeiro
 
IAsyncResult Pattern ou Asynchronous Programming Model (APM)
IAsyncResult Pattern ou Asynchronous Programming Model (APM)IAsyncResult Pattern ou Asynchronous Programming Model (APM)
IAsyncResult Pattern ou Asynchronous Programming Model (APM)Rogério Moraes de Carvalho
 
Algoritmos - Aula 16 B - Arquivos - Exercicios
Algoritmos - Aula 16 B - Arquivos - ExerciciosAlgoritmos - Aula 16 B - Arquivos - Exercicios
Algoritmos - Aula 16 B - Arquivos - ExerciciosRodrigo Kiyoshi Saito
 
Testes e depuração de código com Python
Testes e depuração de código com PythonTestes e depuração de código com Python
Testes e depuração de código com PythonDorneles Treméa
 
Programação Concorrente - Aula 03
Programação Concorrente - Aula 03Programação Concorrente - Aula 03
Programação Concorrente - Aula 03thomasdacosta
 
Testes de Software - Módulo 2
Testes de Software - Módulo 2Testes de Software - Módulo 2
Testes de Software - Módulo 2Rodrigo Paes
 
Introdução PLSQL
Introdução PLSQLIntrodução PLSQL
Introdução PLSQLIsmael
 
De Zero à Web com Python e Django
De Zero à Web com Python e DjangoDe Zero à Web com Python e Django
De Zero à Web com Python e DjangoOsvaldo Santana Neto
 

What's hot (20)

Nada sobre JavaScript
Nada sobre JavaScriptNada sobre JavaScript
Nada sobre JavaScript
 
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
 
Programação Concorrente - Aula 05
Programação Concorrente - Aula 05Programação Concorrente - Aula 05
Programação Concorrente - Aula 05
 
Laços de Repetição
Laços de RepetiçãoLaços de Repetição
Laços de Repetição
 
Trabalhando com Logs no PostgreSQL
Trabalhando com Logs no PostgreSQLTrabalhando com Logs no PostgreSQL
Trabalhando com Logs no PostgreSQL
 
Testes de Software - Módulo 3
Testes de Software - Módulo 3Testes de Software - Módulo 3
Testes de Software - Módulo 3
 
Postgres Tuning
Postgres TuningPostgres Tuning
Postgres Tuning
 
PostgreSQL Rock Star
PostgreSQL Rock StarPostgreSQL Rock Star
PostgreSQL Rock Star
 
Cabra Macho
Cabra MachoCabra Macho
Cabra Macho
 
Java básico - Módulo 04: Estruturas de controle
Java   básico - Módulo 04:  Estruturas de controleJava   básico - Módulo 04:  Estruturas de controle
Java básico - Módulo 04: Estruturas de controle
 
Shell script
Shell scriptShell script
Shell script
 
Testes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de códigoTestes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de código
 
IAsyncResult Pattern ou Asynchronous Programming Model (APM)
IAsyncResult Pattern ou Asynchronous Programming Model (APM)IAsyncResult Pattern ou Asynchronous Programming Model (APM)
IAsyncResult Pattern ou Asynchronous Programming Model (APM)
 
Algoritmos - Aula 16 B - Arquivos - Exercicios
Algoritmos - Aula 16 B - Arquivos - ExerciciosAlgoritmos - Aula 16 B - Arquivos - Exercicios
Algoritmos - Aula 16 B - Arquivos - Exercicios
 
Testes e depuração de código com Python
Testes e depuração de código com PythonTestes e depuração de código com Python
Testes e depuração de código com Python
 
Programação Concorrente - Aula 03
Programação Concorrente - Aula 03Programação Concorrente - Aula 03
Programação Concorrente - Aula 03
 
Testes de Software - Módulo 2
Testes de Software - Módulo 2Testes de Software - Módulo 2
Testes de Software - Módulo 2
 
Introdução PLSQL
Introdução PLSQLIntrodução PLSQL
Introdução PLSQL
 
Alta Concorrência com Postgres
Alta Concorrência com PostgresAlta Concorrência com Postgres
Alta Concorrência com Postgres
 
De Zero à Web com Python e Django
De Zero à Web com Python e DjangoDe Zero à Web com Python e Django
De Zero à Web com Python e Django
 

Similar to Preparação para migração Python 3000

Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem PythonLuciano Ramalho
 
Python 3 e o futuro da linguagem
Python 3 e o futuro da linguagemPython 3 e o futuro da linguagem
Python 3 e o futuro da linguagemDanilo Martins
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação PythonJunior Sobrenome
 
Curso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsCurso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsHelio Colombe
 
Algoritmos e programacao_em_python
Algoritmos e programacao_em_pythonAlgoritmos e programacao_em_python
Algoritmos e programacao_em_pythonArtur Santos
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Pythonrodrigopex
 
Apostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cApostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cMaicon Rodrigues
 
Novidades do Django 1.2 e o que vem por ai
Novidades do Django 1.2 e o que vem por aiNovidades do Django 1.2 e o que vem por ai
Novidades do Django 1.2 e o que vem por aiMarcos Petry
 
A lógica do Python e seus termos
A lógica do Python e seus termosA lógica do Python e seus termos
A lógica do Python e seus termosValore I/O
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do GoogleLuciano Ramalho
 
Matando o Java e Mostrando o Python
Matando o Java e Mostrando o PythonMatando o Java e Mostrando o Python
Matando o Java e Mostrando o PythonOsvaldo Santana Neto
 
ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2michellobo
 
TDC 2015 São Paulo - Clean Code para Testers
TDC 2015 São Paulo - Clean Code para TestersTDC 2015 São Paulo - Clean Code para Testers
TDC 2015 São Paulo - Clean Code para TestersStefan Teixeira
 

Similar to Preparação para migração Python 3000 (20)

Python 3k
Python 3kPython 3k
Python 3k
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Python, CPython, Pythonico, Cython
Python, CPython, Pythonico, CythonPython, CPython, Pythonico, Cython
Python, CPython, Pythonico, Cython
 
Python Emsl2009
Python Emsl2009Python Emsl2009
Python Emsl2009
 
Python 3 e o futuro da linguagem
Python 3 e o futuro da linguagemPython 3 e o futuro da linguagem
Python 3 e o futuro da linguagem
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação Python
 
Curso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsCurso de Python (Básico) - Português
Curso de Python (Básico) - Português
 
Algoritmos e programacao_em_python
Algoritmos e programacao_em_pythonAlgoritmos e programacao_em_python
Algoritmos e programacao_em_python
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Python
 
Programação Defensiva
Programação DefensivaProgramação Defensiva
Programação Defensiva
 
Apostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cApostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-c
 
Novidades do Django 1.2 e o que vem por ai
Novidades do Django 1.2 e o que vem por aiNovidades do Django 1.2 e o que vem por ai
Novidades do Django 1.2 e o que vem por ai
 
A lógica do Python e seus termos
A lógica do Python e seus termosA lógica do Python e seus termos
A lógica do Python e seus termos
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do Google
 
Matando o Java e Mostrando o Python
Matando o Java e Mostrando o PythonMatando o Java e Mostrando o Python
Matando o Java e Mostrando o Python
 
Aula 1 | Introdução a C++
Aula 1 | Introdução a C++Aula 1 | Introdução a C++
Aula 1 | Introdução a C++
 
Mini Curso Python
Mini Curso PythonMini Curso Python
Mini Curso Python
 
ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2
 
TDC 2015 São Paulo - Clean Code para Testers
TDC 2015 São Paulo - Clean Code para TestersTDC 2015 São Paulo - Clean Code para Testers
TDC 2015 São Paulo - Clean Code para Testers
 
Introdução à linguagem python
Introdução à linguagem pythonIntrodução à linguagem python
Introdução à linguagem python
 

Preparação para migração Python 3000

  • 1. Osvaldo Santana Neto osvaldo.santana@indt.org.br
  • 2. Disclaimer Antes de montar essa apresentação o próprio GvR fez uma apresentação sobre Python-3000 Apresentação focada nas mudanças http://www.python.org/doc/essays/ppt/accu2006/Py3kACCU.ppt Essa apresentação foca na preparação para a migração
  • 3. Python 3000 Python 3000 == Py3k == Python 3.0 Não vai ser uma nova linguagem! A idéia principal: Corrigir erros do passado! Compatibilidade retroativa não será uma preocupação Código feito para Python certamente vai quebrar Funcionalidades interessantes poderão ser adicionadas Aquelas que certamente causariam quebra de compatibilidade Se não quebra compatibilidade podem ser adicionadas ainda na série 2.x
  • 4. Quando? Neste momento está sendo discutido o processo de desenvolvimento do Py3k. Cuidados especiais: Não transformar o Py3k no novo Perl6 Rejeitar propostas inviáveis rapidamente para não desperdiçar tempo Cronograma prévio: Primeiro Alpha: não menos de 1 ano Primeiro Beta: provavelmente um ano depois do Alpha Releases 3.1, 3.2, ... lançados imediatamente após
  • 5. PEPs 3000 PEP 3000 – Python 3000 PEP 3001 – Revisão e melhoria da biblioteca padrão PEP 3003 – Como lidar com mudança que causa incompatibilidade PEP 3099 – O que não vão mudar PEP 3100 – Lista de mudanças que serão avaliadas Algumas mudanças já são praticamente certas PEP 3101 – Formatação avançada de strings Porque isso está aqui? Não poderia ser adicionado no Python 2.x? Sintaxe muito semelhante à usada no C# PEP 3102 – Parâmetro obrigatoriamente passado por keyword
  • 6. E o Python 2? Continua o desenvolvimento! Será mantido até que o Python 3 tenha atingido um alto grau de maturidade Funcionalidades do Py3k serão aplicadas à versão 2 sempre que possível Plano de releases cobre as versões 2.6, 2.7, 2.8 e 2.9 Mais informações na PEP 3000
  • 7. Incompatibilidade? Uma visão geral das incompatibilidades previstas: Novas keywords poderão ser criadas dict.keys(), range(), zip() retornarão iteradores (e métodos complementares a esses, que retornam iteradores, sumirão) Todas as strings serão Unicode Redesenho do sistema de I/O Remoção de funções builtin substituíveis por list compreensions Funcionalidades deprecated removidas ● ex. Old-style classes
  • 8. Apoio na migração Ferramentas serão criadas para ajudar na migração Scripts para conversão (sempre que possível) Será possível ligar warnings para código incompatível com o py3k no Python 2 Facilidade de migração é um fator levado em alta consideração no processo da criação do Py3k Ferramentas como pychecker poderão avisar quando algo pode apresentar problema de compatibilidade Mais informações nas PEPs 3003, 3099, 3100
  • 9. Evitando problemas futuros Já é possível se prevenir de problemas de compatibilidade com o Python 3 desde já Muitas dicas podem não servir para nada futuramente :)
  • 10. Dicas Genéricas Repetindo: evite construções que já estão marcadas como candidatas à 'morte'. Sempre que precisar usá-las lembre-se de sinalizar o trecho onde isso ocorre Evite alguns nomes de variáveis que possam se tornar palavras reservadas (ex. preposições em inglês como “as”) List comprehensions e Generator Expressions são suas amigas, use-as!
  • 11. Linguagem Fuja do comando exec Sumirá na forma de comando. Talvez se torne uma função Comando print Passará a ser uma função Evite usar a sintaxe “>>xx”, prefira usar xx.write() Evite usar “,” para suprimir a quebra de linha (ex. print “spam”,) Use != no lugar de <> Evite exceções string Use raise Exception(“spam”) no lugar de raise Exception, “spam”
  • 12. Linguagem Use repr(x) no lugar de `x` Use o operador in no lugar de dict.has_key() Cuidado com funções que retornam lists, elas podem começar a retornar iterators Use inteiro1//inteiro2 no lugar de inteiro1/inteiro2 Remova tudo o que emite “DeprecationWarning”
  • 13. Old-style Classes Todas as classes serão do tipo new-style, mesmo aquelas que não herdam de object Mas as que herdam de object continuarão sendo new- style classes, logo, desde hoje tente fazer: class Spam(object): ... no lugar de class Spam: ... Não está claro ainda se os métodos __(get|set)attr__ desaparecerão (já que em new-style classes é preferível usar __(get|set)attribute__) Minha suspeita é a de que não desaparecerão por se tratarem de métodos usados com propósitos ligeiramente diferentes
  • 14. Builtins Saem: apply() -> f(*args, **kw) buffer() callable() -> try/except compile() -> passa para o módulo sys coerce() execfile(), reload() -> exec() input() -> eval(sys.stdin.readline()) id() -> passa para o módulo sys intern() -> passa para o módulo sys map(), filter() -> list comprehension raw_input() -> sys.stdin.readline() xrange() -> range()
  • 15. Builtins Surgem: exec() -> comando exec print() -> comando print byte() -> antiga classe 'str' Mudam: range(), zip() -> iterator no lugar de list min(), max(), sum() -> tratarão iterators Hierarquia das exceptions
  • 16. Acompanhe o desenvolvimento Leias as PEPs 3000 http://www.python.org/peps/ Assine a lista: python-3000@python.org http://www.python.org/mailman/listinfo/ Acompanhe o blog do GvR http://artima.com/weblogs/