Como tengo varios proyectos de desarrollo en Python, como el motor de MUD de MUnDoCAAD (MUnDoCAAD MUD Engine, véase la entrada "MUnDoCAAD MUD Engine: pasado y presente") y mi intérprete de aventuras tipo-PAWS (véase la entrada "Mi intérprete de aventuras DAAD"), me interesa permitir que este código funcione tanto en versiones de Python 2.X como en las 3.X.
Es por ello que he desarrollado recientemente una solución, un conjunto de módulos Python, que permite tener la misma funcionalidad con independencia de la versión de Python de la que se disponga. Compartiré este código aquí, en mi blog, para quien le pueda servir.
El módulo principal de la solución se llama prn_func, recomiendo su uso con una orden como: from prn_func import prn, y después sustituir todos los usos de print por prn, usando esta función del mismo modo que la nueva función print de Python 3. Su código (a guardar como prn_func.py) es el siguiente:
# Función sustituta de print, compatible con Python 2.X y 3.X
from sys import version_info
if version_info[0] < 3:
# La versión de Python es 2.X
if version_info[1] < 6:
# La versión de Python es menor que la 2.6
try:
from prn_2 import prn
except SyntaxError:
pass
else:
# La versión de Python es mayor que la 2.5
try:
from prn_26 import prn
except SyntaxError:
pass
else:
# La versión de Python es 3.X
try:
from prn_3 import prn
except SyntaxError:
pass
Los otros módulos (prn_2, prn_26 y prn_3) son auxiliares a este. Cada uno de ellos ofrece el soporte de la función de impresión para un conjunto de versiones específico de Python.
El módulo prn_2 ofrece el soporte de la función de impresión para versiones de Python menores que la 2.6. Su código (a guardar como prn_2.py) es el siguiente:
# Exporta la función sustituta de print, en versiones de Python 2.X
from sys import stdout
def prn (*args, **keywords):
textos = []
for arg in args:
textos.append (str (arg))
fichero = keywords.get ('file', stdout)
fichero.write (keywords.get ('sep', ' ').join (textos))
fichero.write (keywords.get ('end', '\n'))
El módulo prn_26 ofrece el soporte de la función de impresión para versiones de Python 2.X mayores o iguales que la 2.6. Su código (a guardar como prn_26.py) es el siguiente:
# Exporta la función sustituta de print, en versiones de Python 2.6.X
from __future__ import print_function
prn = print
El módulo prn_3 ofrece el soporte de la función de impresión para versiones de Python 3.X. Su código (a guardar como prn_3.py) es el siguiente:
# Exporta la función sustituta de print, en versiones de Python 3.X
prn = print
¿Te ha gustado esta entrada? Vótala en Bitacoras.com:
No hay comentarios:
Publicar un comentario