SlideShare una empresa de Scribd logo
1 de 39
Descargar para leer sin conexión
Python ¿2 vs 3?Python ¿2 vs 3?
Joel RiveraJoel Rivera
joel@pymty.orgjoel@pymty.org
Python MonterreyPython Monterrey
www.pymty.org
19 de Febrero de 201519 de Febrero de 2015
Python ¿2 vs 3?
1 of 39
Pure PythonPure Python
La platica va orientada a pure Python, con esto quiero decir que
no se involucra con el API en C de CPython que también cambió.
Como usuario de bibliotecas en python, solamente notas el
efecto de que módulos que usan el API en C tienden a tardarse en
ser portados a Python 3.
Python ¿2 vs 3?
2 of 39
La razónLa razón
Como cualquier otro lenguaje que va evolucionando. Python
llevaba arrastrando un conjunto de características legacy o en
contra de la filosofía misma del lenguaje que se va formando
conforme avanza.
Usualmente lo más susceptibles a pagar por esa deuda técnica
son core developers, quienes simplemente les quedaba tolerar el
no poder implementar mejoras en la robustés del lenguaje por
problemas de compatibilidad.
Todo lo que se consideraba que no fuese retro-compatible se le
suponía a un futuro lejano llamado Python 3000 o Py3k
La idea se origino cercas del 2001.
Python 3.0 fue liberado el 3 de Diciembre del 2008.
Al día de hoy han pasado cerca de 6 años desde su salida.
Python ¿2 vs 3?
3 of 39
El estado actualEl estado actual
Ultima versión estable Python 3.4.2
Soporte a Python 3 en bibliotecas populares:
Python 3 Readiness:
Python 3 Wall Of Superpowers:
http://py3readiness.org/
https://python3wos.appspot.com/
Casi todos los módulos más populares y con desarrollo activo ya
fueron portados a Python 3.
Python 3.3 y superiores agregaron características en el lenguaje
para facilitar la retro-compatibilidad con Python 2.7.
Python ¿2 vs 3?
4 of 39
El problemaEl problema
Rompieron la regla de oro justo cuando el lenguaje estaba más
que nunca ganando popularidad (2006 - 2010). Por lo que a gran
parte de la comunidad les pareció de locos.
Y a otros más no les parece razonable pagar el costo de
re-escribir cosas por que no ganaban algo significativo (como no
tener un GIL).
Mientras los core developers se regocijaban en su core limpio y
organizado donde podían trabajar más a gusto.
Python ¿2 vs 3?
5 of 39
Algunos de los cambios relevantesAlgunos de los cambios relevantes
Nombres de módulos
Clara distinción sobre bytes y strings.
La estructura interna de las clases.
Cambios sutiles en reflexión, excepciones y metaclases.
Una reorganización en general de los módulos en la biblioteca
estándar.
Y lo más importante…
print pasa de ser una palabra reservada a una función.
Al igual que exec pero a ese casi nadie le llora.
Python ¿2 vs 3?
6 of 39
El verdadero problemaEl verdadero problema
Python ¿2 vs 3?
7 of 39
Reescribir códigoReescribir código
Python ¿2 vs 3?
8 of 39
Implementaciones más limitadasImplementaciones más limitadas
PyPy:: soporte experimental para Python 3.
Jython:: Apenas está (en beta) con Python 2.7.
IronPython:: Solo soporta Python 2.7.
Python ¿2 vs 3?
9 of 39
Disponibilidad de bibliotecasDisponibilidad de bibliotecas
No hay mejor código que el que no se escribe.
Python ¿2 vs 3?
10 of 39
¿Y por que habría de impor-¿Y por que habría de impor-
tarme?tarme?
Python 3 es mucho más uniforme.
Python 3 es El futuro del lenguaje.
Si apenas comienzas con el lenguaje conviene que te familiarices
con idiomas modernos y saques provecho a lo más nuevo del
lenguaje.
Python 2 se considera en mantenimiento. Es como Windows XP.
Python ¿2 vs 3?
11 of 39
Estrategías de migraciónEstrategías de migración
Soportar solamente Python 3.
Ramas de desarrollo independientes para 2 y 3.
Convertir el código con 2to3.
Python 2 y 3 sin conversión.
Python ¿2 vs 3?
12 of 39
Preparando el código.Preparando el código.
Python ¿2 vs 3?
13 of 39
Usa Python 2.7.Usa Python 2.7.
Python ¿2 vs 3?
14 of 39
Usar // en vez de / para dividir enteros.Usar // en vez de / para dividir enteros.
Python ¿2 vs 3?
15 of 39
Al ordenar usa `key` en vez de `cmp`Al ordenar usa `key` en vez de `cmp`
Python ¿2 vs 3?
16 of 39
New-style classes.New-style classes.
New style:
class Persona(object):
def method(self):
pass
Old style:
class Persona:
def method(self):
pass
En Python 3, no es necesario heredar de object por lo que es lo
mismo:
class Persona:
....
que esto
class Persona(object):
....
Pero el segundo es new-style en Python 2 y Python 3.
Python ¿2 vs 3?
17 of 39
Separar datos binarios y cadenas.Separar datos binarios y cadenas.
Gran parte de el como hacer esto es dependiendo de la lógica del
programa, por ejemplo al procesar imágenes, no deberían de
tener un encoding y por lo tanto deben de manipularse y
comportarse como bytes:
>>> b'abcd'[0]
97
No como cadena:
>>> 'abcd'[0]
a
Literal byte string:
b'raw bytes'
Literal unicode string: (por compatibilidad se agrego en python
3.3)
u'¡San Nicolás!'
Python ¿2 vs 3?
18 of 39
Methodos de comparación.Methodos de comparación.
__cmp__ es remplazado por los métodos de comparación más
explícitos:
__lt__ <
__le__ <=
__gt__ >
__ge__ >=
__eq__ ==
__ne__ !=
Python ¿2 vs 3?
19 of 39
Verificar dependencia a módulos que yaVerificar dependencia a módulos que ya
no existen.no existen.
Python ¿2 vs 3?
20 of 39
Iteradores sobre diccionarios.Iteradores sobre diccionarios.
Python ¿2 vs 3?
21 of 39
Reorganización de la bibliotecaReorganización de la biblioteca
estándarestándar
Lo siguiente es un extracto de Porting to Python 3 por Lennart
Regebro.
No incluye la reestructuración de urllib.
Python ¿2 vs 3?
22 of 39
Parte 1 / 5Parte 1 / 5
Python 2 name Python 3 name six name
anydbm dbm
BaseHTTPServer http.server BaseHTTPServer
__builtin__ builtins builtins
CGIHTTPServer http.server CGIHTTPServer
ConfigParser configparser configparser
copy_reg copyreg copyreg
cPickle pickle cPickle
cStringIO.StringIO io.StringIO cStringIO
Python ¿2 vs 3?
23 of 39
Parte 2 / 5Parte 2 / 5
Python 2 name Python 3 name six name
Cookie http.cookies http_cookies
cookielib http.cookiejar http_cookiejar
dbhash dbm.bsd
dbm dbm.ndbm
dumbdb dbm.dumb
Dialog tkinter.dialog tkinter_dialog
DocXMLRPCServer xmlrpc.server
FileDialog tkinter.FileDialog tkinter_filedialo
FixTk tkinter._fix
Python ¿2 vs 3?
24 of 39
Parte 3 / 5Parte 3 / 5
Python 2 name Python 3 name six name
gdbm dbm.gnu
htmlentitydefs html.entities html_entities
HTMLParser html.parser html_parser
httplib http.client http_client
markupbase _markupbase
Queue queue queue
repr reprlib reprlib
robotparser urllib.robotparser urllib_robotpars
ScrolledText tkinter.scolledtext tkinter_scrolled
SimpleDialog tkinter.simpledialog tkinter_simpledi
Python ¿2 vs 3?
25 of 39
Parte 4 / 5Parte 4 / 5
Python 2 name Python 3 name six name
SimpleHTTPServer http.server SimpleHTTPSe
SimpleXMLRPCServer xmlrpc.server
StringIO.StringIO io.StringIO
SocketServer socketserver socketserver
test.test_support test.support tkinter
Tkinter tkinter tkinter
Tix tkinter.tix tkinter_tix
Tkconstants tkinter.constants tkinter_cons
tkColorChooser tkinter.colorchooser tkinter_colo
Python ¿2 vs 3?
26 of 39
Parte 5 / 5Parte 5 / 5
Python 2 name Python 3 name six name
tkCommonDialog tkinter.commondialog tkinter_commondi
Tkdnd tkinter.dnd tkinter_dnd
tkFileDialog tkinter.filedialog tkinter_tkfiledi
tkFont tkinter.font tkinter_font
tkMessageBox tkinter.messagebox tkinter_messageb
tkSimpleDialog tkinter.simpledialog tkinter_tksimple
turtle tkinter.turtle
UserList collections
UserString collections
whichdb dbm
_winreg winreg winreg
xmlrpclib xmlrpc.client
Python ¿2 vs 3?
27 of 39
Sobre UnicodeSobre Unicode
Python ¿2 vs 3?
28 of 39
Errores comunesErrores comunes
Casi todo pythonista en algún momento de su vida le toco algo
así:
python LoL_Coding.py
File "LoL_Coding.py", line 3
SyntaxError: Non-ASCII character 'xc2' in file LoL_Coding.py on line 3, but no encoding
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 4: ordinal not in ra
En especial si lo que programas lee de archivos o red.
Python ¿2 vs 3?
29 of 39
Erroces comunes cont.Erroces comunes cont.
La verdad es que es un problema que nos buscamos por no tener
una clara distinción sobre cadenas de caracteres, bytes y
encodings.
Que en general se puede resumir a:
bytes + encoding -> caracteres -> encoded string
Python 3 toma una postura mucho más acorde a lo que se espera
en estos años de i18n y de paso te ahorras muchos:
-*- coding: utf-8 -*-
En todos tus archivos.
Python ¿2 vs 3?
30 of 39
El lado obscuroEl lado obscuro
Dicho lo anterior existen problemas sobre la aproximación de
unicode en Python, es particularmente molesta cuando se lidia
con protocolos con encodings que no están claramente definidos
o se pasa de bytes a cadenas de forma constante.
La critica principal es sobre un soporte a unicode enfocado hacia
los principiantes.
Para más información:
http://lucumr.pocoo.org/2014/1/5/unicode-in-2-and-3/
http://lucumr.pocoo.org/2014/5/12/everything-about-
unicode/
Python ¿2 vs 3?
31 of 39
form __future__ im‐form __future__ im‐
port *port *
Como forma de facilitar el portar el código de vesiones anteriores
se tienen al alcance las siguientes llamadas a __future__
Carácteristica Opt. Mand. Efecto
division 2.2.0a2 3.0 PEP 238: Changing the
Division Operator
absolute_import 2.5.0a1 3.0 PEP 328: Imports:
Multi-Line and
Absolute/Relative
print_function 2.6.0a2 3.0 PEP 3105: Make print a
function
unicode_literals 2.6.0a2 3.0 PEP 3112: Bytes literals
in Python 3000
Python ¿2 vs 3?
32 of 39
Mi recomendaciónMi recomendación
Python ¿2 vs 3?
33 of 39
Proyectos personalesProyectos personales
Verifica tus dependencias
En caso de que todas soporten python 3 usalo.
En caso contrario usa python 2.7 favoreciendo los módulos con
soporte a 3.
Escribe tú código de Python 2 usando idiomas modernos.
Python ¿2 vs 3?
34 of 39
Distribuir códigoDistribuir código
Si estar haciendo un módulo para compartir soporta las dos
versiones.
Empieza con >3.3 o >2.6 teniendo en mente la compatibilidad.
Considera usar six para la capa de compatibilidad.
Python ¿2 vs 3?
35 of 39
Cool Python 3 stuffCool Python 3 stuff
Unicode por defecto en todas partes
asyncio
enum
ipaddress
ensurepip
pathlib
statistics
tracemalloc
faulthandler
nolocal
Python ¿2 vs 3?
36 of 39
Cool Python 3 stuff cont.Cool Python 3 stuff cont.
selectors
concurrent.futures
yield from
@functools.singledispatch
venv
sys.setswitchinterval
keyword only arguments
tuple unpacking
anotaciones
Mejor instalador en windows
Python ¿2 vs 3?
37 of 39
Recursos y ¿Preguntas?Recursos y ¿Preguntas?
Python 3 Readiness:
Python 3 Wall Of Superpowers:
Porting to Python 3:
Why should OpenStack move to Python 3 right now?:
Unicode in 2 and 3:
Everything about Unicode:
six:
http://py3readiness.org/
https://python3wos.appspot.com/
http://python3porting.com/
http://techs.enovance.com/6521/openstack_python3
http://lucumr.pocoo.org/2014/1
/5/unicode-in-2-and-3/
http://lucumr.pocoo.org/2014/5
/12/everything-about-unicode/
https://pypi.python.org/pypi/six
Python ¿2 vs 3?
38 of 39
Recursos y ¿Preguntas? cont.Recursos y ¿Preguntas? cont.
__future__:
What's new in Python 3.0:
What's new in Python 3.1:
What's new in Python 3.2:
What's new in Python 3.3:
What's new in Python 3.4:
https://docs.python.org/2/library
/__future__.html
https://docs.python.org
/dev/whatsnew/3.0.html
https://docs.python.org
/dev/whatsnew/3.1.html
https://docs.python.org
/dev/whatsnew/3.2.html
https://docs.python.org
/dev/whatsnew/3.3.html
https://docs.python.org
/dev/whatsnew/3.4.html
Python ¿2 vs 3?
39 of 39

Más contenido relacionado

Destacado

Ramona adéu
Ramona adéuRamona adéu
Ramona adéuP. J.
 
Python + Delphi: Um relacionamento que está dando certo
Python + Delphi: Um relacionamento que está dando certoPython + Delphi: Um relacionamento que está dando certo
Python + Delphi: Um relacionamento que está dando certoFernando Macedo
 
Evidencia2ml
Evidencia2mlEvidencia2ml
Evidencia2mlmaluacsa
 
Evidencia1ml
Evidencia1mlEvidencia1ml
Evidencia1mlmaluacsa
 
Evidencia1ml
Evidencia1mlEvidencia1ml
Evidencia1mlmaluacsa
 
Evidencias de sesión 4 Curso Python
Evidencias de  sesión 4 Curso PythonEvidencias de  sesión 4 Curso Python
Evidencias de sesión 4 Curso Pythonmaluacsa
 
Evidencia Sesión 5: Python
Evidencia Sesión 5: PythonEvidencia Sesión 5: Python
Evidencia Sesión 5: Pythonmaluacsa
 
Sesión 2: Ejemplos y prácticas en Python
Sesión 2: Ejemplos y prácticas en PythonSesión 2: Ejemplos y prácticas en Python
Sesión 2: Ejemplos y prácticas en Pythonmaluacsa
 
Sesión 1: Python
Sesión 1: PythonSesión 1: Python
Sesión 1: Pythonmaluacsa
 
Tipos de datos numéricos en Python
Tipos de datos numéricos en PythonTipos de datos numéricos en Python
Tipos de datos numéricos en Pythonmaluacsa
 
Evidencias de la tercera sesión: Programación en Python
Evidencias de la tercera sesión: Programación en PythonEvidencias de la tercera sesión: Programación en Python
Evidencias de la tercera sesión: Programación en Pythonmaluacsa
 
De Cero A Python En 45 Min
De Cero A Python En 45 MinDe Cero A Python En 45 Min
De Cero A Python En 45 MinMarco Mansilla
 

Destacado (20)

Ramona adéu
Ramona adéuRamona adéu
Ramona adéu
 
Orientació amb la bruíxola
Orientació amb la bruíxolaOrientació amb la bruíxola
Orientació amb la bruíxola
 
Python + Delphi: Um relacionamento que está dando certo
Python + Delphi: Um relacionamento que está dando certoPython + Delphi: Um relacionamento que está dando certo
Python + Delphi: Um relacionamento que está dando certo
 
Tablacqa2
Tablacqa2Tablacqa2
Tablacqa2
 
Evidencia2ml
Evidencia2mlEvidencia2ml
Evidencia2ml
 
Tabla cqa
Tabla cqaTabla cqa
Tabla cqa
 
Tablacqa3
Tablacqa3Tablacqa3
Tablacqa3
 
Evidencia1ml
Evidencia1mlEvidencia1ml
Evidencia1ml
 
Evidencia1ml
Evidencia1mlEvidencia1ml
Evidencia1ml
 
Python + Ciencia = ♥
Python + Ciencia = ♥Python + Ciencia = ♥
Python + Ciencia = ♥
 
Introducción a Python
Introducción a PythonIntroducción a Python
Introducción a Python
 
Web 2.0
Web 2.0Web 2.0
Web 2.0
 
Evidencias de sesión 4 Curso Python
Evidencias de  sesión 4 Curso PythonEvidencias de  sesión 4 Curso Python
Evidencias de sesión 4 Curso Python
 
Evidencia Sesión 5: Python
Evidencia Sesión 5: PythonEvidencia Sesión 5: Python
Evidencia Sesión 5: Python
 
Sesión 2: Ejemplos y prácticas en Python
Sesión 2: Ejemplos y prácticas en PythonSesión 2: Ejemplos y prácticas en Python
Sesión 2: Ejemplos y prácticas en Python
 
Sesión 1: Python
Sesión 1: PythonSesión 1: Python
Sesión 1: Python
 
Unidad 1
Unidad 1Unidad 1
Unidad 1
 
Tipos de datos numéricos en Python
Tipos de datos numéricos en PythonTipos de datos numéricos en Python
Tipos de datos numéricos en Python
 
Evidencias de la tercera sesión: Programación en Python
Evidencias de la tercera sesión: Programación en PythonEvidencias de la tercera sesión: Programación en Python
Evidencias de la tercera sesión: Programación en Python
 
De Cero A Python En 45 Min
De Cero A Python En 45 MinDe Cero A Python En 45 Min
De Cero A Python En 45 Min
 

Similar a Python ¿2 vs 3?

Python_Module_01_Courtesy.pdf
Python_Module_01_Courtesy.pdfPython_Module_01_Courtesy.pdf
Python_Module_01_Courtesy.pdfCeth1
 
Inmersion enpython3.0.11
Inmersion enpython3.0.11Inmersion enpython3.0.11
Inmersion enpython3.0.11silroggero
 
Inmersión en Python 3.0.11
Inmersión en Python 3.0.11Inmersión en Python 3.0.11
Inmersión en Python 3.0.11Erik Gur
 
Python y la POO, en una clase, UNNe-Corrientes
Python y la POO, en una clase, UNNe-CorrientesPython y la POO, en una clase, UNNe-Corrientes
Python y la POO, en una clase, UNNe-Corrientesalexis ibarra
 
El poder de los reptiles: Hacer herramientas de hacking es fácil
El poder de los reptiles: Hacer herramientas de hacking es fácilEl poder de los reptiles: Hacer herramientas de hacking es fácil
El poder de los reptiles: Hacer herramientas de hacking es fácilDaniel Garcia (a.k.a cr0hn)
 
Python para ingenieros como alternativa a matlab
Python para ingenieros como alternativa a matlabPython para ingenieros como alternativa a matlab
Python para ingenieros como alternativa a matlabSistemadeEstudiosMed
 
Acceder a C desde Python (O viceversa)
Acceder a C desde Python (O viceversa)Acceder a C desde Python (O viceversa)
Acceder a C desde Python (O viceversa)Juan Rodríguez
 
Introducción a Python
Introducción a Python Introducción a Python
Introducción a Python Eddie Malca
 
El tutorial de pythonnnn
El tutorial de pythonnnnEl tutorial de pythonnnn
El tutorial de pythonnnnYordan Ramos
 
Parallel python sistemas operativos avanzados
Parallel python sistemas operativos avanzadosParallel python sistemas operativos avanzados
Parallel python sistemas operativos avanzadosDaniel Muccela
 
excelente Tutorial aprendizaje de Python3.pdf
excelente Tutorial aprendizaje de Python3.pdfexcelente Tutorial aprendizaje de Python3.pdf
excelente Tutorial aprendizaje de Python3.pdfvictorpedro20
 
Introduccion_a_Python_000000000000000.pdf
Introduccion_a_Python_000000000000000.pdfIntroduccion_a_Python_000000000000000.pdf
Introduccion_a_Python_000000000000000.pdfFranciaMascarell
 
Tutorial python3
Tutorial python3Tutorial python3
Tutorial python3DannyEtn
 

Similar a Python ¿2 vs 3? (20)

Clase1_Python-CTIC
Clase1_Python-CTICClase1_Python-CTIC
Clase1_Python-CTIC
 
Python_Module_01_Courtesy.pdf
Python_Module_01_Courtesy.pdfPython_Module_01_Courtesy.pdf
Python_Module_01_Courtesy.pdf
 
Inmersion enpython3.0.11
Inmersion enpython3.0.11Inmersion enpython3.0.11
Inmersion enpython3.0.11
 
Inmersión en Python 3.0.11
Inmersión en Python 3.0.11Inmersión en Python 3.0.11
Inmersión en Python 3.0.11
 
Python y la POO, en una clase, UNNe-Corrientes
Python y la POO, en una clase, UNNe-CorrientesPython y la POO, en una clase, UNNe-Corrientes
Python y la POO, en una clase, UNNe-Corrientes
 
Python power 1
Python power 1Python power 1
Python power 1
 
El poder de los reptiles: Hacer herramientas de hacking es fácil
El poder de los reptiles: Hacer herramientas de hacking es fácilEl poder de los reptiles: Hacer herramientas de hacking es fácil
El poder de los reptiles: Hacer herramientas de hacking es fácil
 
Python para ingenieros como alternativa a matlab
Python para ingenieros como alternativa a matlabPython para ingenieros como alternativa a matlab
Python para ingenieros como alternativa a matlab
 
Acceder a C desde Python (O viceversa)
Acceder a C desde Python (O viceversa)Acceder a C desde Python (O viceversa)
Acceder a C desde Python (O viceversa)
 
Introducción a Python
Introducción a Python Introducción a Python
Introducción a Python
 
ITSCH Taller Python by Uriel C.H.
ITSCH Taller Python by Uriel C.H.ITSCH Taller Python by Uriel C.H.
ITSCH Taller Python by Uriel C.H.
 
Tutorial python3
Tutorial python3Tutorial python3
Tutorial python3
 
El tutorial de pythonnnn
El tutorial de pythonnnnEl tutorial de pythonnnn
El tutorial de pythonnnn
 
Tutorial python3
Tutorial python3Tutorial python3
Tutorial python3
 
Python conceptos básicos
Python   conceptos básicosPython   conceptos básicos
Python conceptos básicos
 
Parallel python sistemas operativos avanzados
Parallel python sistemas operativos avanzadosParallel python sistemas operativos avanzados
Parallel python sistemas operativos avanzados
 
excelente Tutorial aprendizaje de Python3.pdf
excelente Tutorial aprendizaje de Python3.pdfexcelente Tutorial aprendizaje de Python3.pdf
excelente Tutorial aprendizaje de Python3.pdf
 
Introducción a python
Introducción a pythonIntroducción a python
Introducción a python
 
Introduccion_a_Python_000000000000000.pdf
Introduccion_a_Python_000000000000000.pdfIntroduccion_a_Python_000000000000000.pdf
Introduccion_a_Python_000000000000000.pdf
 
Tutorial python3
Tutorial python3Tutorial python3
Tutorial python3
 

Último

Theme design in Plone 6 - World Plone Day 2024
Theme design in Plone 6 - World Plone Day 2024Theme design in Plone 6 - World Plone Day 2024
Theme design in Plone 6 - World Plone Day 2024Leonardo J. Caballero G.
 
Semana 5-Conceptualización del lenguaje de programación C++
Semana 5-Conceptualización del lenguaje de programación C++Semana 5-Conceptualización del lenguaje de programación C++
Semana 5-Conceptualización del lenguaje de programación C++luzgaray6
 
Presentación de html, css y javascript.
Presentación  de html, css y javascript.Presentación  de html, css y javascript.
Presentación de html, css y javascript.CeteliInmaculada
 
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptxMacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptxcalzadillasluis134
 
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVOSISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVOELIAMARYTOVARFLOREZD
 
Introducción a Plone CMS - World Plone Day 2024
Introducción a Plone CMS - World Plone Day 2024Introducción a Plone CMS - World Plone Day 2024
Introducción a Plone CMS - World Plone Day 2024Leonardo J. Caballero G.
 

Último (6)

Theme design in Plone 6 - World Plone Day 2024
Theme design in Plone 6 - World Plone Day 2024Theme design in Plone 6 - World Plone Day 2024
Theme design in Plone 6 - World Plone Day 2024
 
Semana 5-Conceptualización del lenguaje de programación C++
Semana 5-Conceptualización del lenguaje de programación C++Semana 5-Conceptualización del lenguaje de programación C++
Semana 5-Conceptualización del lenguaje de programación C++
 
Presentación de html, css y javascript.
Presentación  de html, css y javascript.Presentación  de html, css y javascript.
Presentación de html, css y javascript.
 
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptxMacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
 
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVOSISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
 
Introducción a Plone CMS - World Plone Day 2024
Introducción a Plone CMS - World Plone Day 2024Introducción a Plone CMS - World Plone Day 2024
Introducción a Plone CMS - World Plone Day 2024
 

Python ¿2 vs 3?

  • 1. Python ¿2 vs 3?Python ¿2 vs 3? Joel RiveraJoel Rivera joel@pymty.orgjoel@pymty.org Python MonterreyPython Monterrey www.pymty.org 19 de Febrero de 201519 de Febrero de 2015 Python ¿2 vs 3? 1 of 39
  • 2. Pure PythonPure Python La platica va orientada a pure Python, con esto quiero decir que no se involucra con el API en C de CPython que también cambió. Como usuario de bibliotecas en python, solamente notas el efecto de que módulos que usan el API en C tienden a tardarse en ser portados a Python 3. Python ¿2 vs 3? 2 of 39
  • 3. La razónLa razón Como cualquier otro lenguaje que va evolucionando. Python llevaba arrastrando un conjunto de características legacy o en contra de la filosofía misma del lenguaje que se va formando conforme avanza. Usualmente lo más susceptibles a pagar por esa deuda técnica son core developers, quienes simplemente les quedaba tolerar el no poder implementar mejoras en la robustés del lenguaje por problemas de compatibilidad. Todo lo que se consideraba que no fuese retro-compatible se le suponía a un futuro lejano llamado Python 3000 o Py3k La idea se origino cercas del 2001. Python 3.0 fue liberado el 3 de Diciembre del 2008. Al día de hoy han pasado cerca de 6 años desde su salida. Python ¿2 vs 3? 3 of 39
  • 4. El estado actualEl estado actual Ultima versión estable Python 3.4.2 Soporte a Python 3 en bibliotecas populares: Python 3 Readiness: Python 3 Wall Of Superpowers: http://py3readiness.org/ https://python3wos.appspot.com/ Casi todos los módulos más populares y con desarrollo activo ya fueron portados a Python 3. Python 3.3 y superiores agregaron características en el lenguaje para facilitar la retro-compatibilidad con Python 2.7. Python ¿2 vs 3? 4 of 39
  • 5. El problemaEl problema Rompieron la regla de oro justo cuando el lenguaje estaba más que nunca ganando popularidad (2006 - 2010). Por lo que a gran parte de la comunidad les pareció de locos. Y a otros más no les parece razonable pagar el costo de re-escribir cosas por que no ganaban algo significativo (como no tener un GIL). Mientras los core developers se regocijaban en su core limpio y organizado donde podían trabajar más a gusto. Python ¿2 vs 3? 5 of 39
  • 6. Algunos de los cambios relevantesAlgunos de los cambios relevantes Nombres de módulos Clara distinción sobre bytes y strings. La estructura interna de las clases. Cambios sutiles en reflexión, excepciones y metaclases. Una reorganización en general de los módulos en la biblioteca estándar. Y lo más importante… print pasa de ser una palabra reservada a una función. Al igual que exec pero a ese casi nadie le llora. Python ¿2 vs 3? 6 of 39
  • 7. El verdadero problemaEl verdadero problema Python ¿2 vs 3? 7 of 39
  • 9. Implementaciones más limitadasImplementaciones más limitadas PyPy:: soporte experimental para Python 3. Jython:: Apenas está (en beta) con Python 2.7. IronPython:: Solo soporta Python 2.7. Python ¿2 vs 3? 9 of 39
  • 10. Disponibilidad de bibliotecasDisponibilidad de bibliotecas No hay mejor código que el que no se escribe. Python ¿2 vs 3? 10 of 39
  • 11. ¿Y por que habría de impor-¿Y por que habría de impor- tarme?tarme? Python 3 es mucho más uniforme. Python 3 es El futuro del lenguaje. Si apenas comienzas con el lenguaje conviene que te familiarices con idiomas modernos y saques provecho a lo más nuevo del lenguaje. Python 2 se considera en mantenimiento. Es como Windows XP. Python ¿2 vs 3? 11 of 39
  • 12. Estrategías de migraciónEstrategías de migración Soportar solamente Python 3. Ramas de desarrollo independientes para 2 y 3. Convertir el código con 2to3. Python 2 y 3 sin conversión. Python ¿2 vs 3? 12 of 39
  • 13. Preparando el código.Preparando el código. Python ¿2 vs 3? 13 of 39
  • 14. Usa Python 2.7.Usa Python 2.7. Python ¿2 vs 3? 14 of 39
  • 15. Usar // en vez de / para dividir enteros.Usar // en vez de / para dividir enteros. Python ¿2 vs 3? 15 of 39
  • 16. Al ordenar usa `key` en vez de `cmp`Al ordenar usa `key` en vez de `cmp` Python ¿2 vs 3? 16 of 39
  • 17. New-style classes.New-style classes. New style: class Persona(object): def method(self): pass Old style: class Persona: def method(self): pass En Python 3, no es necesario heredar de object por lo que es lo mismo: class Persona: .... que esto class Persona(object): .... Pero el segundo es new-style en Python 2 y Python 3. Python ¿2 vs 3? 17 of 39
  • 18. Separar datos binarios y cadenas.Separar datos binarios y cadenas. Gran parte de el como hacer esto es dependiendo de la lógica del programa, por ejemplo al procesar imágenes, no deberían de tener un encoding y por lo tanto deben de manipularse y comportarse como bytes: >>> b'abcd'[0] 97 No como cadena: >>> 'abcd'[0] a Literal byte string: b'raw bytes' Literal unicode string: (por compatibilidad se agrego en python 3.3) u'¡San Nicolás!' Python ¿2 vs 3? 18 of 39
  • 19. Methodos de comparación.Methodos de comparación. __cmp__ es remplazado por los métodos de comparación más explícitos: __lt__ < __le__ <= __gt__ > __ge__ >= __eq__ == __ne__ != Python ¿2 vs 3? 19 of 39
  • 20. Verificar dependencia a módulos que yaVerificar dependencia a módulos que ya no existen.no existen. Python ¿2 vs 3? 20 of 39
  • 21. Iteradores sobre diccionarios.Iteradores sobre diccionarios. Python ¿2 vs 3? 21 of 39
  • 22. Reorganización de la bibliotecaReorganización de la biblioteca estándarestándar Lo siguiente es un extracto de Porting to Python 3 por Lennart Regebro. No incluye la reestructuración de urllib. Python ¿2 vs 3? 22 of 39
  • 23. Parte 1 / 5Parte 1 / 5 Python 2 name Python 3 name six name anydbm dbm BaseHTTPServer http.server BaseHTTPServer __builtin__ builtins builtins CGIHTTPServer http.server CGIHTTPServer ConfigParser configparser configparser copy_reg copyreg copyreg cPickle pickle cPickle cStringIO.StringIO io.StringIO cStringIO Python ¿2 vs 3? 23 of 39
  • 24. Parte 2 / 5Parte 2 / 5 Python 2 name Python 3 name six name Cookie http.cookies http_cookies cookielib http.cookiejar http_cookiejar dbhash dbm.bsd dbm dbm.ndbm dumbdb dbm.dumb Dialog tkinter.dialog tkinter_dialog DocXMLRPCServer xmlrpc.server FileDialog tkinter.FileDialog tkinter_filedialo FixTk tkinter._fix Python ¿2 vs 3? 24 of 39
  • 25. Parte 3 / 5Parte 3 / 5 Python 2 name Python 3 name six name gdbm dbm.gnu htmlentitydefs html.entities html_entities HTMLParser html.parser html_parser httplib http.client http_client markupbase _markupbase Queue queue queue repr reprlib reprlib robotparser urllib.robotparser urllib_robotpars ScrolledText tkinter.scolledtext tkinter_scrolled SimpleDialog tkinter.simpledialog tkinter_simpledi Python ¿2 vs 3? 25 of 39
  • 26. Parte 4 / 5Parte 4 / 5 Python 2 name Python 3 name six name SimpleHTTPServer http.server SimpleHTTPSe SimpleXMLRPCServer xmlrpc.server StringIO.StringIO io.StringIO SocketServer socketserver socketserver test.test_support test.support tkinter Tkinter tkinter tkinter Tix tkinter.tix tkinter_tix Tkconstants tkinter.constants tkinter_cons tkColorChooser tkinter.colorchooser tkinter_colo Python ¿2 vs 3? 26 of 39
  • 27. Parte 5 / 5Parte 5 / 5 Python 2 name Python 3 name six name tkCommonDialog tkinter.commondialog tkinter_commondi Tkdnd tkinter.dnd tkinter_dnd tkFileDialog tkinter.filedialog tkinter_tkfiledi tkFont tkinter.font tkinter_font tkMessageBox tkinter.messagebox tkinter_messageb tkSimpleDialog tkinter.simpledialog tkinter_tksimple turtle tkinter.turtle UserList collections UserString collections whichdb dbm _winreg winreg winreg xmlrpclib xmlrpc.client Python ¿2 vs 3? 27 of 39
  • 28. Sobre UnicodeSobre Unicode Python ¿2 vs 3? 28 of 39
  • 29. Errores comunesErrores comunes Casi todo pythonista en algún momento de su vida le toco algo así: python LoL_Coding.py File "LoL_Coding.py", line 3 SyntaxError: Non-ASCII character 'xc2' in file LoL_Coding.py on line 3, but no encoding Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 4: ordinal not in ra En especial si lo que programas lee de archivos o red. Python ¿2 vs 3? 29 of 39
  • 30. Erroces comunes cont.Erroces comunes cont. La verdad es que es un problema que nos buscamos por no tener una clara distinción sobre cadenas de caracteres, bytes y encodings. Que en general se puede resumir a: bytes + encoding -> caracteres -> encoded string Python 3 toma una postura mucho más acorde a lo que se espera en estos años de i18n y de paso te ahorras muchos: -*- coding: utf-8 -*- En todos tus archivos. Python ¿2 vs 3? 30 of 39
  • 31. El lado obscuroEl lado obscuro Dicho lo anterior existen problemas sobre la aproximación de unicode en Python, es particularmente molesta cuando se lidia con protocolos con encodings que no están claramente definidos o se pasa de bytes a cadenas de forma constante. La critica principal es sobre un soporte a unicode enfocado hacia los principiantes. Para más información: http://lucumr.pocoo.org/2014/1/5/unicode-in-2-and-3/ http://lucumr.pocoo.org/2014/5/12/everything-about- unicode/ Python ¿2 vs 3? 31 of 39
  • 32. form __future__ im‐form __future__ im‐ port *port * Como forma de facilitar el portar el código de vesiones anteriores se tienen al alcance las siguientes llamadas a __future__ Carácteristica Opt. Mand. Efecto division 2.2.0a2 3.0 PEP 238: Changing the Division Operator absolute_import 2.5.0a1 3.0 PEP 328: Imports: Multi-Line and Absolute/Relative print_function 2.6.0a2 3.0 PEP 3105: Make print a function unicode_literals 2.6.0a2 3.0 PEP 3112: Bytes literals in Python 3000 Python ¿2 vs 3? 32 of 39
  • 34. Proyectos personalesProyectos personales Verifica tus dependencias En caso de que todas soporten python 3 usalo. En caso contrario usa python 2.7 favoreciendo los módulos con soporte a 3. Escribe tú código de Python 2 usando idiomas modernos. Python ¿2 vs 3? 34 of 39
  • 35. Distribuir códigoDistribuir código Si estar haciendo un módulo para compartir soporta las dos versiones. Empieza con >3.3 o >2.6 teniendo en mente la compatibilidad. Considera usar six para la capa de compatibilidad. Python ¿2 vs 3? 35 of 39
  • 36. Cool Python 3 stuffCool Python 3 stuff Unicode por defecto en todas partes asyncio enum ipaddress ensurepip pathlib statistics tracemalloc faulthandler nolocal Python ¿2 vs 3? 36 of 39
  • 37. Cool Python 3 stuff cont.Cool Python 3 stuff cont. selectors concurrent.futures yield from @functools.singledispatch venv sys.setswitchinterval keyword only arguments tuple unpacking anotaciones Mejor instalador en windows Python ¿2 vs 3? 37 of 39
  • 38. Recursos y ¿Preguntas?Recursos y ¿Preguntas? Python 3 Readiness: Python 3 Wall Of Superpowers: Porting to Python 3: Why should OpenStack move to Python 3 right now?: Unicode in 2 and 3: Everything about Unicode: six: http://py3readiness.org/ https://python3wos.appspot.com/ http://python3porting.com/ http://techs.enovance.com/6521/openstack_python3 http://lucumr.pocoo.org/2014/1 /5/unicode-in-2-and-3/ http://lucumr.pocoo.org/2014/5 /12/everything-about-unicode/ https://pypi.python.org/pypi/six Python ¿2 vs 3? 38 of 39
  • 39. Recursos y ¿Preguntas? cont.Recursos y ¿Preguntas? cont. __future__: What's new in Python 3.0: What's new in Python 3.1: What's new in Python 3.2: What's new in Python 3.3: What's new in Python 3.4: https://docs.python.org/2/library /__future__.html https://docs.python.org /dev/whatsnew/3.0.html https://docs.python.org /dev/whatsnew/3.1.html https://docs.python.org /dev/whatsnew/3.2.html https://docs.python.org /dev/whatsnew/3.3.html https://docs.python.org /dev/whatsnew/3.4.html Python ¿2 vs 3? 39 of 39