namedtuple del módulo collections se utiliza para definir subclases de la clase tuple, que permiten crear tuplas a medida a los programadores. El nombre del nuevo tipo de tupla será el que se indique en el primer argumento y constará de los campos que se incluyan en la lista del segundo argumento:
Si el argumento rename es True los nombres de campos que no sean válidos serán sustituidos, automáticamente, por nombres posicionales ('_1', '_2', ...). También, si el argumento verbose es True la definición de la clase será impresa después de que se construya. Esta última opción que tiende a desaparecer se obtiene también mediante el atributo _source.
Los nombres de los campos pueden contener caracteres alfabéticos, numéricos y guiones bajos; y no pueden comenzar con caracteres numéricos o guiones bajos, ni pueden ser, lógicamente, palabras reservadas del lenguaje Python.
Ir al índice del tutorial de Python
namedtuple(typename, field_names, verbose=False, rename=False)
Si el argumento rename es True los nombres de campos que no sean válidos serán sustituidos, automáticamente, por nombres posicionales ('_1', '_2', ...). También, si el argumento verbose es True la definición de la clase será impresa después de que se construya. Esta última opción que tiende a desaparecer se obtiene también mediante el atributo _source.
Los nombres de los campos pueden contener caracteres alfabéticos, numéricos y guiones bajos; y no pueden comenzar con caracteres numéricos o guiones bajos, ni pueden ser, lógicamente, palabras reservadas del lenguaje Python.
import collections # Crear un nuevo tipo de tupla para contener datos # de elementos químicos elemento = collections.namedtuple('elemento', ['nombre', 'simbolo', 'numato']) # Crear un nuevo objeto del tipo elemento, # con datos del Azufre elem = elemento('Azufre', 'S', 16) # Mostrar información del objeto anterior print(elem.nombre, elem.simbolo, elem.numato) # Azufre S 16 print(elem[0], elem[1], elem[2]) # Azufre S 16 print(elem) # elemento(nombre='Azufre', simbolo='S', numato=16) # Conocer de qué tipo es el objeto 'elem' print(type(elem)) ## Mostrar la definición de la subclase 'elem' print(elem._source) # Mostrar los nombres de campos de la subclase 'elem' print(elem._fields) # nombres de campos: ('nombre', 'simbolo', 'numato') # Sustituir los valores actuales elem = elem._replace(nombre='Carbono', simbolo='C', numato=6) # Mostrar información print(elem.nombre) # 'Carbono' # Mostrar tipo de diccionario con los campos ordenados # como en una tupla print(elem._asdict()) # Obtener el valor del campo indicado print(getattr(elem, 'simbolo')) # 'C' # Crear otro tipo nuevo para contener coordenadas de # un plano y color coordenada = collections.namedtuple('coordenada', ['x', 'y', 'color']) coord = coordenada(12, 53, 'blue') # Mostrar valores print('x=', coord.x) print('y=', coord.y) print('color=', coord.color) x, y, color = coord print(x, y, color)
Ir al índice del tutorial de Python