<jupyter_start><jupyter_text>[![imagenes](imagenes/pythonista.png)](https://pythonista.io)  Flujos de datos.Un flujo de datos es una secuencia de datos provenientes de una o varias fuentes, al cual se le pueden aplicar ciertas funciones que lo pueden transformar, combinar o condensar.Python es un lenguaje que ha evolucionado para poder manipular de forma altamente eficiente los flujos de  datos.Muchos de los cambios entre Python 2 y Python 3 tiene que ver en el modo en el que se manejan los flujos de datos en la memoria.En este capítulo se estudiarán algunas funciones básicas de Python y de su bilbioteca estándar capaces de tratar con flujos de datos.Los flujos de datos son representados como colecciones de datos como lo son los tipos:* *list*.* *tuple*.* *dict*.* *set*.* *frozenset*.* *str*.* *bytes*.  La función *map()*.Esta función permite aplicar una función a uno o varios flujos de datos.````pythonmap(, )```En este caso, debe de existir un número *n* de flujos de datos para cada parámetro de la función.  **Ejemplos:**<jupyter_code>map(lambda x,y,z: (x + y) ** z,
      [1, 2, 3, 4, 5],
      [6, 7, 8, 9, 10],
      [2, 3, 0.5, 4, 2])
resultado = map(lambda x,y,z: (x + y) ** z,
      [1, 2, 3, 4, 5],
      [6, 7, 8, 9, 10],
      [2, 3, 0.5, 4, 2])
for item in resultado:
    print(item)
resultado = map(lambda x,y,z: (x + y) ** z,
      [1, 2, 3, 4, 5],
      [6, 7, 8, 9, 10],
      [2, 3, 0.5, 4, 2, 3])
list(resultado)
[item for item in map(lambda x,y,z: (x + y) ** z,
      [1, 2, 3, 4, 5],
      [6, 7, 8, 9, 10],
      [2, 3, 0.5, 4, 2])]<jupyter_output><empty_output><jupyter_text>La función *filter()*.Esta función aplica una función que da por resultado un objeto de tipo *bool*. ```filter(, )```El flujo resultante de *filter()* corresponderá a aquellos datos que regresen *True* al ser usados como argumento de la función. **Ejemplo:**<jupyter_code>filter(lambda x: x % 2 == 0, range(0,27))
resultado = filter(lambda x: x % 2 == 0, range(0,27))
for item  in resultado:
    print(item)
list(filter(lambda x: x % 2 == 0, range(0,27)))
[item for item in filter(lambda x: x % 2 == 0, range(0,27))]<jupyter_output><empty_output><jupyter_text>La función *zip()*.Esta función une en tuplas dos  o mas flujos.<jupyter_code>[item for item in zip(('uno', 'dos', 'tres', 'cuatro', 'cinco'), 
                      (1, 2, 3, 4, 5))]
dict(item for item in zip(('uno', 'dos', 'tres', 'cuatro', 'cinco'), (1, 2, 3, 4, 5)))
[item for item in zip(('nombre', 'primer apellido', 'segundo apellido'),  
                           ('Juan' , 'Pérez'))]
dict(item for item in zip(('nombre', 'primer apellido', 'segundo apellido'),  
                           ('Juan' , 'Pérez')))<jupyter_output><empty_output><jupyter_text>El módulo *functools*.Es un módulo que forma parte de la bilbioteca estándar de Python y contiene una biblioteca de funciones especializadas en programación funcional.<jupyter_code>import functools
dir(functools)<jupyter_output><empty_output><jupyter_text>La función *functools.reduce()*.Esta función aplica una función a cada uno de los elementos de un flujo y el primer parámentro es el resultado de la función previa.<jupyter_code>from functools import reduce
reduce(lambda x,y: x + y,[1,2,3,4,5])
muestra = [ 12, 13, 12.5, 14, 15, 11, 13, 14]
len(muestra)
reduce(lambda x,y: x + y, muestra)/len(muestra)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.14349243996442337, 'fraction_numerical': 0.03646605395790098, 'mean_word_length': 3.9911242603550297, 'pattern_counts': {'":': 0, '<': 21, '<?xml version=': 0, '>': 21, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '424951', 'license': 'MIT', 'n_tokens_mistral': 1373, 'n_tokens_neox': 1262, 'n_words': 448, 'path': '01_funciones_para_flujos_de datos.ipynb', 'repo_name': 'PythonistaMX/py121', 'size': '3373'}