jueves, 20 de diciembre de 2018

Receta Python 3 No. 8-9: Crear un Nuevo Tipo de Dato o Atributo de Instancia

1. Problema

Agregar nueva funcionalidad a una tipo de dato a través de la adición de un atributo de instancia.

2. Solución

Para la agregación de funcionalidad a una clase es necesario definirla como un descriptor; para ello se requiere agregar las siguientes operaciones básicas: __get__(), __set__(), y __delete__() (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python descriptor.py [enlace alternativo]:

Prueba de ejecución:

2 5
...
TypeError: Se requiere un argumento de tipo entero.

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

lunes, 17 de diciembre de 2018

Receta Python 3 No. 8-8: Extener una Propiedad en una Subclase

1. Problema

Se requiere exteneder la funcionalidad de una propiedad definida en una clase padre sobre la implementación de una sublase.

2. Solución

El uso de la invocación de los métodos de acceso por medio del método super() es la solución al requerimiento (Beazly, Jones, 2013).

3. Código Python 3

Prueba de ejecución:

Asignando nuevo nombre
Recuperando nombre
Einstein

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

domingo, 16 de diciembre de 2018

Receta Python 3 No. 8-7: Invocar a un Método de una Clase Padre

1. Problema

Se requiere invocar un método que pertenezca a la definición e implementación de una clase padre (superclase) en lugar del método sobreescrito en una clase hija (subclase).

2. Solución

A través del método super() es posible invocar el método perteneciente a una clase padre (Beazly, Jones, 2013).

Un uso común de este método es la inicialización del constructor de una superclase.

3. Código Python 3

Archivo Python invocar_metodo_superclase.py [enlace alternativo]:

Prueba de ejecución:


ClaseB.mensaje

ClaseA.mensaje

En la línea 10 se invoca el método constructor (o inicializador) de la clase ClaseA por medio de la instrucicón super().__init__().

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

jueves, 13 de diciembre de 2018

Receta Python 3 No. 8-6: Crear Atributos Gestionados

1. Problema

Crear atributos gestionados para validar o comprobar la asignación u obtención de valores de una instancia.

2. Solución

Por medio de la definición de una propiedad es posible definir y personalizar el acceso a un atributo. Esto se realiza por medio de atributos: @property, @nombre_atributo.accesor (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python atributos_gestionados.py [enlace alternativo]:

Prueba de ejecución:

Edward
TypeError: El tipo de dato debe ser string

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

viernes, 7 de diciembre de 2018

Receta Python 3 No. 8-5: Encapsular Elementos de Datos en una Clase

1. Problema

Encapsular campos de instancia como elementos privados independiente de la carencia de modificadores de acceso en Python.

2. Solución

A través de la convención de nombres para campos de instancia que consiste en poner un carácter de guión bajo (o underscore) sobre los miembros atributos y métodos se supone como elementos internos (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python encapsular_miembros.py [enlace alternativo]:


Aquí hay que tener en cuenta que la convención de nombres no hace que un miembro (método o atributo) sea privada: es sólo una convención de nombre.

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

jueves, 6 de diciembre de 2018

Receta Python 3 No. 8-4: Uso Eficiente de Memoria al Crear una Cantidad Grande de Instancias

1. Problema

Se cuenta con un script Python que hace uso de una gran cantidad de instancias. Se requiere optimizar la memoria para un mejor desempeño.

2. Solución

Por medio del miembro __slots__ se puede optimizar la representación interna de instancias: cada instancia se crea como un arreglo de tamaño fijo, similar a una tupla. Cada atributo dentro de __slots__ se mapea un índice específico dentro del arreglo (Beazly, Jones, 2013).

3. Código Python

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

miércoles, 5 de diciembre de 2018

Receta Python 3 No. 8-3: Definir el Protocolo de Gestión de Contexto sobre un Objeto

1. Problema

Definir el protocolo de gestión de contexto sobre un objeto a través de la sentencia with.

2. Solución

Para lograr este soporte sobre un objeto es necesario implementar los métodos __enter__() y __exit__ dentro de la definición de una clase (Beazly, Jones, 2013).

3. Código Python 3

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

lunes, 3 de diciembre de 2018

Receta Python 3 No. 8-2: Personalizar el Formato de una Cadena de Caracteres

1. Problema

Personalizar el formato de una cadena de caracteres de un objeto a través de la función format().

2. Solución

En la definición de una clase se debe sobreescribir el método __format()__ para escribir una cadena de caracteres con formato (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python personalizacion_formato.py [enlace alternativo]:

Prueba de ejecución:

2018-11-30
11/30/2018
La fecha es 2018-11-30
La fecha es 11/30/2018

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

domingo, 2 de diciembre de 2018

Receta Python 3 No. 8-1: Cambiar la Representación de Cadena de Caracteres de Objetos de una Clase

1. Problema

Cambiar la representación de cadena de caracteres por defecto de objetos de una clase a una específica requerida.

2. Solución

Por medio de los métodos __repr__() y __str__() se puede cambiar la representación de cadena de caracteres de los objetos (o instancias) de una clase. El primer método, __repr__(), permite crear una representación textual para la recreación de una instancia; mientras que __str__() convierte la instancia actual en un texto (cadena de caracteres) (Beazly, Jones, 2013).

3. Código Python 3

Archivo cambiar_representacion.py [enlace alternativo]:

En las líneas 6-7 se especifica la representación de instancia para su recreación. Nótese aquí el uso del especificador !r para indicar que se debe usar __repr__() en lugar de __str__().

También debe destacarse el uso de self para invocar los atributos de instancia.


Prueba de ejecución:


Par(2, 3)
(2, 3)

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

sábado, 24 de noviembre de 2018

Receta Python 3 No. 7-12: Acceder Variables Definidas en un Closure

1. Problema

Acceder las variables definidas en la implementación de un closure.

2. Solución

Las variables de definidas en un closure no quedan expuestas a otras secciones del código. Para proveer acceso a estas variables será necesario crear funciones de acceso.

3. Código Python 3

Archivo Python acceso_variables_closure.py [enlace alternativo]:

Prueba de ejecución:

n = 0
n = 10
10

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

domingo, 18 de noviembre de 2018

Receta Python 3 No. 7-11: Funciones Callback En-línea

1. Problema

Se requiere que el código de invocación de funciones tenga apariencia de una secuencia de invocaciones procedurales.

2. Solución

Para solucionar este problema se usan generadores y corutinas.

3. Código Python 3

Archivo Python funciones_callback_en_linea.py [enlace alternativo]:

Prueba de ejecución:

5
Python 3.x
1
3
5
7
9
11
13
15
17
19
Cierre

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

jueves, 8 de noviembre de 2018

Receta Python 3 No. 7-10: Enviar Datos Adicionales en un Callback

1. Problema

Se requiere adicionar datos extras en la invocación de funciones de tipo callback: manejadores de eventos, completitud, entre otros.

2. Solución

Se pueden definir las funciones que actúan de forma directa sobre los argumentos pasados (tupla) a la función que ejecuta los argumentos, y que se encarga de ejecutar el callback con los resultados generados.

3. Código Python 3

Archivo Python datos_sobre_callback.py [enlace alternativo]:

Prueba de ejecución:

[1] generó: 5

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

sábado, 29 de septiembre de 2018

Receta Python 3 No. 7-9: Reemplazar Clases de un Solo Método por Funciones

1. Problema

Se requiere convertir una clase con un único método, a parte del constructor __init__(), en una función; esto con el propósito de simplificar el código.

2. Solución

Por medio de los closures, una clase de este tipo se puede convertir en funciones. Un closure es una función que contiene 

3. Código Python 3

Archivo Python clases_como_funciones.py [enlace alternativo]:


Esta clase puede convertir en función; así:

Archivo Python clase_como_funcion.py [enlace alternativo]:

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

viernes, 24 de agosto de 2018

Receta Python 3 No. 7-8: Usar Diferente Número de Argumentos en una Función

1. Problema

Invocar una función con una cantidad de argumentos diferente a la requerida.

2. Solución

 El módulo functools cuenta con la función partial la cual permite especificar valores fijos a uno o más parámetros de una función (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python fijar_valores_funcion_invocacion.py [enlace alternativo]:

Prueba de ejecución:


10
26

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

Receta Python 3 No. 7-7: Capturar Variables en Funciones Anónimas

1. Problema

En una expresión lambda capturar variables durante el tiempo de su diseño.

2. Solución

Las variables usadas en el cuerpo de definición de una expresión lambda (i.e., modelo para la definición de una función anónima) se conocen como variables libres: los valores actuales de estas variables son los que se recuperan en la expresión usada (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python variables-libres-funciones-anonimas.py [enlace alternativo]:
Prueba de ejecución:

27
27
25
27

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

miércoles, 22 de agosto de 2018

Receta Python 3 No. 7-6: Definir Funciones Anónimas En Línea

1. Problema

Se requiere escribir una función anónima para ordenar los elementos de una lista.

2. Solución

Las funciones anónimas resultan útiles para la definición de un conjunto de operaciones que no requieren estar definidas dentro del cuerpo de una función con nombre (Beazly, Jones, 2013).

Por ejemplo, se podría utilizar una función anónima para ordenar los elementos de una lista sin necesidad de crear un cuerpo de función con un nombre particular.

3. Código Python 3


Prueba de ejecución:


5
7
['Jaela Meneses', 'Oliva Ordoñez', 'Edward Ortiz', 'Juan Urbano']

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

viernes, 17 de agosto de 2018

Receta Python 3 No. 7-5: Definir Funciones con Parámetros Predeterminados

1. Problema

Se requiere definir funciones que acepten parámetros por defecto y opcionales.

2. Solución

Para definir un parámetro opcional y predeterminado sobre una función basta con asignar, a través del operador asignación =, el valor en cuestión. Además, es necesario especificar los argumentos opcionales al final de los requeridos (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python funcion-parametros-predeterminados.py [enlace alternativo]:

Prueba de ejecución:

fernando@outlook.com Mensaje de prueba john@outlook.com 2018-08-17 07:47:13.992053

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

jueves, 16 de agosto de 2018

Receta Python 3 No. 7-4: Retornar Múltiples Valores desde una Función

1. Problema

Se requiere retornar múltiples valores desde una función.

2. Solución

Para retornar múltiples valores desde una función se recurre al uso de tuplas (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python multiples-valores-retorno-funcion.py [enlace alternativo]:

Prueba de ejecución:

2 3 4 5

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

sábado, 11 de agosto de 2018

Receta Python 3 No. 7-3: Especificar Metadatos a los Parámetros de una Función

1. Problema

Se requiere especificar en una función metadatos sobre sus parámetros.

2. Solución

Entre los metadatos que se pueden especificar en los parámetros de una función es el tipo de dato. Además, también es posible asignar el tipo de dato al valor de retorno de la función (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python metadatos-funcion.py [enlace alternativo]:

Prueba de ejecución:


Help on function sumar in module __main__:

sumar(numero1:int, numero2:int) -> int
    Suma dos números enteros.
    :param numero1: Primer sumando (int)
    :param numero2: Segundo sumando (int)
    :return: Suma de dos números (int)

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

viernes, 10 de agosto de 2018

Receta Python 3 No. 7-2: Escribir Funciones que Acepten Solo Argumentos por su Nombre

1. Problema

Se requiere escribir una función que acepte determinados argumentos por palabra clave.

2. Solución

Se debe preceder el argumento por un carácter de asterisco *, antes que nada es necesario separarlo por una coma (como cualquier otro argumento) (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python argumentos-nombrados.py [enlace alternativo]:

Prueba de ejecución:


La línea 6 produce el error TypeError el cual indica sólo se ha pasado un argumento; se debe remover o comentar esta línea para eliminar el error.

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

lunes, 6 de agosto de 2018

Receta Python 3 No. 7-1: Escribir Funciones que Acepten Cualquier Número de Argumentos

1. Problema

Se requiere escribir funciones que acepten cualquier número de argumentos.

2. Solución

El operador * (asterisco) seguido de un nombre de parámetro ayuda a especificar un número variable de argumentos de entrada en una función (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python funciones-argumentos-variable.py  [enlace alternativo]:

Prueba de ejecución:


2.5
4.25

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

domingo, 5 de agosto de 2018

Receta Python 3 No. 6-13: Resumen y Estadísticas de Datos

1. Problema

Se requiere crear un resumen y estadísticas de un volumen de datos considerable.

2. Solución

Existe una librería muy poderosa para computar estadísitcas y resúmenes de datos: Pandas. Esta librería provee un sinnúmero de funciones para el tratamiento de datos de gran volumen (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python resumenes-estadisticas-datos.py [enlace alternativo]:

Prueba de ejecución:


   Unnamed: 0  litter  rx  time  status
0           1       1   1   101       0
1           2       1   0    49       1
2           3       1   0   104       0
3           4       2   1   104       0
4           5       2   0   102       0
     Unnamed: 0  litter  rx  time  status
145         146      49   0    91       0
146         147      49   0   104       0
147         148      50   1   104       0
148         149      50   0   104       0
149         150      50   0    79       1
0     0
1     1
2     0
3     0
4     0
5     0
6     0
7     0
8     0
9     0
10    0
11    0
12    0
13    0
14    0
15    1
16    1
17    0
18    1
19    0
20    1
21    1
22    0
23    0
24    0
25    0
26    0
27    1
28    0
29    0
Name: status, dtype: int64
       Unnamed: 0      litter          rx        time      status
count  150.000000  150.000000  150.000000  150.000000  150.000000
mean    75.500000   25.500000    0.333333   89.426667    0.266667
std     43.445368   14.479214    0.472984   17.277190    0.443698
min      1.000000    1.000000    0.000000   34.000000    0.000000
25%     38.250000   13.000000    0.000000   78.250000    0.000000
50%     75.500000   25.500000    0.000000   94.500000    0.000000
75%    112.750000   38.000000    1.000000  104.000000    1.000000

max    150.000000   50.000000    1.000000  104.000000    1.000000

Archivo ratas.csv [enlace alternativo].

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

sábado, 4 de agosto de 2018

Receta Python 3 No. 6-12: Leer Estructuras Binarias Anidadas de Tamaño Variable

1. Problema

Se requiere leer datos en formato binario que contiene registros anidados representados con estructuras de tamaño variable. Los datos pueden ir desde texto, pasando por imáganes, vídeo y figuras.

2. Solución

El módulo struct permite codificar y decodificar cualquier estructura de datos representada como datos binarios (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python lectura-estructura-datos-anidadas.py [enlace alternativo]:

Prueba de ejecución:

[[(1.0, 2.5), (3.5, 4.0), (2.5, 1.5)], [(7.0, 1.2), (5.1, 3.0), (0.5, 7.5), (0.8, 9.0)], [(3.4, 6.3), (1.2, 0.5), (4.6, 9.2)]]

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

viernes, 3 de agosto de 2018

Receta Python 3 No. 6-11: Leer y Escribir Arreglos Binarios

1. Problema

Se requiere leer y escribir arreglos binarios para diferentes estructuras de datos.

2. Solución

El módulo struct permite trabajar con datos binarios. Entre sus capacidades está la de permitir guardar tuplas en un archivo binario.

3. Código Python 3

Archivo Python leer-escribir-arreglos-binarios.py [enlace alternativo]:

Prueba de ejecución:


(2, 3.0, 5.0)
(7, 11.0, 13.0)
(17, 19.0, 23.0)

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

miércoles, 1 de agosto de 2018

Receta Python 3 No. 6-10: Codificar y Decodificar en Base64

1. Problema

Codificar y decodifcar datos binarios en el sistema de codificación Base64.

2. Solución

El módulo integrado base64 provee las funciones b64encode() y b64decode() para llevar a cabo las operaciones requeridas (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python codificar-decodificar-base64.py [enlace alternativo]:

Prueba de ejecución:


b'UHl0aG9u'
b'Python'

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

martes, 31 de julio de 2018

Receta Python 3 No. 6-9: Decodificar y Codificar Dígitos Hexadecimales

1. Problema

Decodificar una cadena de caracteres representada con dígitos hexadecimales en una representación binaria, y codificar una cadena de bytes como un valor hexadecimal.

2. Solución

El módulo nativo binascii permite decodificar o codificar una cadena de dígitos hexadecimales a través de sus diferentes funciones: b2a_hex() y a2b_hex() (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python decodificar-codificar-hexadecimal.py [enlace alternativo]:

Prueba de ejecución:


b'507974686f6e'
b'Python'

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

lunes, 30 de julio de 2018

Receta Python 3 No. 6-8: Interactuar con una Base de Datos Relacional

1. Problema

Realizar operaciones básicas sobre una base de datos relacional.

2. Solución

El módulo sqlite3 provee mecanismos para el tratamiento de bases de datos relacionales basadas en archivos. Este módulo se basa en la implementación de SQLite (Beazly, Jones, 2013).

Python también ofrece soporte para motores de bases de datos relacionales basadas en servidor.

3. Código Python 3

Archivo Python operaciones-base-datos.py [enlace alternativo]:

Prueba de ejecución:


('Python', 3.7)
('Java', 11.0)
('C#', 7.0)
('PHP', 7.0)


('Python', 3.7)

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

sábado, 28 de julio de 2018

Receta Python 3 No. 6-7: Parsear Documentos XML con Nombres de Espacio

1. Problema

Parsear un documento XML usando nombres de espacio.

2. Solución

Por medio de la función parse() se carga el documento XML y luego a partir de una clase Python personalizada se crea la funcionalidad para parsear un documento XML y extraer los nombres de espacio (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python parsear-xml-namespaces.py [enlace alternativo]:

Prueba de ejecución:


<Element '{http://www.w3.org/1999/xhtml}html' at 0x0000021DCEAB3A98>

Documento Web

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O