¿Sigues programando imperativamente? ¡La programación funcional de Python hace que su código sea más elegante!

Python admite la programación funcional, un paradigma de programación que trata los programas de computadora como composiciones de funciones matemáticas.

Directorio de artículos

1. expresión lambda

Definición de expresión lambda

Escenarios de aplicación de expresiones lambda

Limitaciones de las expresiones lambda

Uso avanzado de expresiones lambda

En segundo lugar, las funciones de orden superior de Python

Definición de funciones de orden superior

Funciones de orden superior de uso común

funcionar como parámetro

función como valor de retorno

3. Módulo de herramientas funcionales

Introducción al módulo de funciones

función parcial()

función lru_cache()

función wraps()

función cmp_to_key()

4. Generador de Python

definición de generador

Cómo funcionan los generadores

Ventajas de los generadores

Escenarios de aplicación de generadores

Notas sobre generadores

5. Decorador de pitones

definicion de decorador

Cómo trabajan los decoradores

Escenarios de aplicación de decoradores.

Nota sobre los decoradores

6. Comprensión de lista de Python y comprensión de diccionario

Definición de comprensión de lista

Cómo funcionan las comprensiones de listas

Escenarios de aplicación de la comprensión de listas

definición de comprensión del diccionario

Cómo funcionan las comprensiones de diccionario

Escenarios de aplicación de la comprensión del diccionario

Notas sobre comprensiones de listas y comprensiones de diccionarios

7. Bibliotecas de programación funcional en Python

herramientas funcionales

itertools

herramientas

fn.py

PyMonad


1. expresión lambda

Las expresiones lambda son una característica importante en el lenguaje Python, que se puede usar para definir funciones anónimas simples. Las expresiones lambda se usan comúnmente en escenarios como funciones de orden superior, listas de comprensión, definiciones de diccionario y decoradores. Cabe señalar que las expresiones lambda generalmente solo son adecuadas para definiciones de funciones simples, y las definiciones de funciones complejas generalmente deben definirse mediante declaraciones def.

Definición de expresión lambda

Una expresión lambda es una función anónima que define una función simple donde se espera que se use una función. La sintaxis de una expresión lambda es la siguiente:

lambda arguments: expression

Entre ellos, arguments representa la lista de parámetros de la función, que puede tener varios parámetros separados por comas; expresión representa la expresión del valor de retorno de la función, que puede ser cualquier expresión.

Aquí hay un código de muestra que usa expresiones lambda:

my_list = [1, 2, 3, 4, 5]
result = map(lambda x: x*2, my_list)
print(list(result))

En el código anterior, definimos una función anónima usando la expresión lambda y la pasamos a la función map().

Escenarios de aplicación de expresiones lambda

Las expresiones lambda se utilizan a menudo para definir funciones simples para un solo uso. Por ejemplo, cuando usamos funciones de orden superior como map(), reduce() y filter(), podemos usar expresiones lambda para definir funciones para mapear, reducir y filtrar.

Aquí hay un código de muestra que usa expresiones lambda:

my_list = [1, 2, 3, 4, 5]
result = filter(lambda x: x%2==0, my_list)
print(list(result))

En el código anterior, definimos una función usando la expresión lambda para filtrar los elementos pares en la lista y la pasamos a la función filter().

Limitaciones de las expresiones lambda

Las expresiones lambda generalmente solo son adecuadas para definiciones de funciones simples, y las definiciones de funciones complejas generalmente deben definirse mediante declaraciones def. Una expresión lambda puede contener solo una expresión y el resultado de esa expresión será el valor de retorno de la función. Los operadores de declaración o asignación no se pueden usar en expresiones lambda.

Aquí hay un código de muestra que no puede usar expresiones lambda:

def my_function():
    print("My function")
    return 1

my_lambda = lambda: (print("My lambda"), 1)[1]
result = my_lambda()
print(result)

En el código anterior, definimos una función my_function(), que contiene una declaración de impresión y una declaración de devolución. Intentamos usar expresiones lambda para definir la misma función, pero dado que las expresiones lambda solo pueden contener una expresión, usamos una expresión ternaria para simular la declaración de retorno.

Uso avanzado de expresiones lambda

Las expresiones lambda se pueden usar junto con otras funciones del lenguaje Python, como listas de comprensión, diccionarios de comprensión y decoradores.

Aquí hay un código de ejemplo que usa expresiones lambda y listas de comprensión:

my_list = [1, 2, 3, 4, 5]
result = [(lambda x: x*2)(x) for x in my_list]
print(result)

En el código anterior, usamos expresiones lambda y listas de comprensión para crear una nueva lista que contiene el doble de elementos en la lista original.

En segundo lugar, las funciones de orden superior de Python

Las funciones de orden superior son un concepto importante en la programación funcional de Python, que puede hacer que el código sea más flexible y reducir la duplicación de código. Las funciones de orden superior comúnmente utilizadas en Python incluyen map(), reduce(), filter(), etc. Las funciones se pueden pasar como argumentos a otras funciones o devolverse a la persona que llama como valores devueltos. Cabe señalar que las funciones de orden superior generalmente necesitan usar expresiones lambda para definir funciones, y las expresiones lambda se pueden usar para definir funciones anónimas simples.

Definición de funciones de orden superior

Una función de orden superior es una función que puede aceptar una función como argumento o devolver una función como resultado. Algunas funciones de orden superior están integradas en Python, incluidas map(), reduce(), filter(), etc.

Aquí hay un código de muestra usando la función map():

my_list = [1, 2, 3, 4, 5]
result = map(lambda x: x*2, my_list)
print(list(result))

En el código anterior, estamos multiplicando los elementos de una lista por 2 usando la función map() y convirtiendo el resultado en una lista usando la función list().

Funciones de orden superior de uso común

Las funciones de orden superior comúnmente utilizadas en Python incluyen:

  • La función map(): acepta una función y una secuencia como parámetros, aplica la función a cada elemento de la secuencia y devuelve una nueva secuencia.

Aquí hay un código de muestra usando la función map():

my_list = [1, 2, 3, 4, 5]
result = map(lambda x: x*2, my_list)
print(list(result))

En el código anterior, estamos multiplicando los elementos de una lista por 2 usando la función map() y convirtiendo el resultado en una lista usando la función list().

  • función reduce(): acepta una función y una secuencia como parámetros, y utiliza la función para reducir los elementos de la secuencia a un único valor.

Aquí hay un código de ejemplo usando la función reduce():

from functools import reduce

my_list = [1, 2, 3, 4, 5]
result = reduce(lambda x, y: x+y, my_list)
print(result)

En el código anterior, usamos la función reduce() para acumular los elementos en una lista y devolver el resultado acumulado.

  • Función filter(): acepta una función y una secuencia como parámetros, usa la función para filtrar los elementos elegibles en la secuencia y devuelve una nueva secuencia.

Aquí hay un código de muestra usando la función filter():

my_list = [1, 2, 3, 4, 5]
result = filter(lambda x: x%2==0, my_list)
print(list(result))

En el código anterior, filtramos los elementos pares en una lista usando la función filter() y convertimos el resultado en una lista usando la función list().

funcionar como parámetro

En Python, las funciones se pueden pasar como argumentos a otras funciones. Este uso puede hacer que el código sea más flexible y reducir la duplicación de código.

Aquí hay un código de muestra que usa una función como argumento:

def my_function(x):
    return x*2

def apply_function(f, lst):
    return [f(x) for x in lst]

my_list = [1, 2, 3, 4, 5]
result = apply_function(my_function, my_list)
print(result)

En el código anterior, definimos una función my_function() para multiplicar un número por 2. Luego definimos una función apply_function() que toma una función y una lista como parámetros, aplica la función a cada elemento de la lista y devuelve una nueva lista. Finalmente, pasamos la función my_function() y la lista my_list a la función apply_function() y guardamos su resultado en la variable result.

función como valor de retorno

En Python, las funciones también se pueden devolver a la persona que llama como valores de retorno. Este uso puede hacer que el código sea más flexible y puede devolver diferentes funciones según diferentes situaciones.

Aquí hay un código de ejemplo que usa una función como valor de retorno:

def get_math_function(operation):
    if operation == '+':
        return lambda x, y: x+y
    elif operation == '-':
        return lambda x, y: x-y
    elif operation == '*':
        return lambda x, y: x*y
    elif operation == '/':
        return lambda x, y: x/y

my_function = get_math_function('*')
result = my_function(2, 3)
print(result)

En el código anterior, hemos definido una función get_math_function() que devuelve diferentes funciones dependiendo de los parámetros. Luego llamamos a la función get_math_function(), pasando el parámetro '*', y guardamos la función devuelta en la variable my_function. Finalmente, llamamos a la función my_function(), pasando 2 y 3 como parámetros, y guardamos el resultado en la variable result.

3. Módulo de herramientas funcionales

El módulo functools es un módulo de la biblioteca estándar de Python que proporciona algunas funciones de orden superior y herramientas de programación funcional. Este módulo se puede utilizar para implementar funciones como el procesamiento de funciones, funciones parciales y almacenamiento en caché. Las funciones comúnmente utilizadas en el módulo functools incluyen la función parcial(), la función lru_cache(), la función wraps(), la función cmp_to_key(), etc. Cabe señalar que las funciones en el módulo functools generalmente deben usarse junto con otras funciones para lograr funciones más complejas.

Introducción al módulo de funciones

El módulo functools es un módulo de la biblioteca estándar de Python que proporciona algunas funciones de orden superior y herramientas de programación funcional. Este módulo se puede utilizar para implementar funciones como el procesamiento de funciones, funciones parciales y almacenamiento en caché.

Aquí hay un código de ejemplo usando el módulo functools:

import functools

def my_function(x, y):
    return x*y

my_partial = functools.partial(my_function, y=2)
result = my_partial(3)
print(result)

En el código anterior, usamos la función parcial() en el módulo functools para crear una función parcial my_partial, que fija el segundo parámetro de la función my_function en 2. Luego llamamos a la función my_partial(), pasando 3 como primer parámetro de la función my_function(), y guardamos el resultado en la variable result.

función parcial()

La función parcial() es una función en el módulo functools para crear funciones parciales. Una función parcial se refiere a fijar algunos parámetros de una función y devolver una nueva función.

Aquí hay un código de muestra que usa la función parcial ():

import functools

def my_function(x, y):
    return x*y

my_partial = functools.partial(my_function, y=2)
result = my_partial(3)
print(result)

En el código anterior, usamos la función parcial() para crear una función parcial my_partial, que fija el segundo parámetro de la función my_function en 2. Luego llamamos a la función my_partial(), pasando 3 como primer parámetro de la función my_function(), y guardamos el resultado en la variable result.

función lru_cache()

La función lru_cache() es una función en el módulo functools, que se usa para crear un caché, que puede almacenar en caché el resultado de la llamada a la función y evitar cálculos repetidos.

El siguiente es un código de muestra que utiliza la función lru_cache():

import functools

@functools.lru_cache()
def my_function(x):
    print("Calculating...")
    return x*x

result = my_function(2)
print(result)

result = my_function(2)
print(result)

En el código anterior, usamos la función lru_cache() para crear un caché para almacenar en caché el resultado de la llamada a la función my_function(). Luego llamamos a la función my_function(), pasando 2 como argumento, y guardamos el resultado en la variable result. Cuando se llama por segunda vez a la función my_function(), ya que se ha calculado antes, el resultado se obtiene directamente de la memoria caché y no se realiza ningún cálculo.

función wraps()

La función wraps() es una función en el módulo functools, que se usa para definir un decorador, que se usa para copiar __name__, doc, __module__ y otros atributos de la función decorada a la función decoradora.

Aquí hay un código de muestra usando la función wraps():

import functools

def my_decorator(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        print("Before...")
        result = func(*args, **kwargs)
        print("After...")
        return result
    return wrapper

@my_decorator
def my_function(x):
    """
    This is my function.
    """
    return x*x

result = my_function(2)
print(result)
print(my_function.__name__)
print(my_function.__doc__)

En el código anterior, definimos un decorador my_decorator, que se utiliza para imprimir información antes y después de la ejecución de la función decorada. Luego usamos la función wraps() para copiar las propiedades de la función decorada en la función decoradora. Finalmente, decoramos una función my_function con my_decorator y llamamos a la función.

función cmp_to_key()

La función cmp_to_key() es una función del módulo functools que convierte una función de comparación de estilo antiguo en una función clave. En Python 2.x, la función de comparación se usa para comparar el tamaño de dos elementos; en Python 3.x, la función de comparación se eliminó y se reemplazó por la función clave.

El siguiente es un código de muestra que utiliza la función cmp_to_key():

import functools

def my_compare(x, y):
    if x < y:
        return -1
    elif x > y:
        return 1
    else:
        return 0

my_list = [5, 3, 2, 8, 7]
my_key = functools.cmp_to_key(my_compare)
my_list.sort(key=my_key)
print(my_list)

En el código anterior, definimos una función de comparación de estilo antiguo my_compare para comparar el tamaño de dos elementos. Luego convertimos esta función a la función clave my_key usando la función cmp_to_key(). Finalmente, ordenamos my_list usando la función my_list.sort(), pasando my_key como parámetro.

4. Generador de Python

Un generador es un tipo especial de iterador que puede generar datos dinámicamente y puede crearse a través de una función o una expresión de generador. Los generadores tienen las ventajas de la computación perezosa, secuencias infinitas, procesamiento de flujo, etc., y pueden usarse para procesar grandes cantidades de datos, generar secuencias infinitas, implementar corrutinas y programación asincrónica, etc. Cabe señalar que el generador solo puede iterar una vez, no puede usar operaciones de división y debe cerrarse a tiempo.

definición de generador

Un generador es un tipo especial de iterador que genera dinámicamente datos en un bucle en lugar de generar todos los datos al principio. Los generadores se pueden crear utilizando funciones o expresiones generadoras.

Aquí hay un código de ejemplo para crear un generador usando una expresión de generador:

my_generator = (x*x for x in range(10))
print(list(my_generator))

En el código anterior, usamos la expresión del generador para crear un generador my_generator que puede generar dinámicamente cuadrados del 0 al 9 y convertirlo en una lista usando la función list().

Cómo funcionan los generadores

El principio de funcionamiento del generador se puede describir simplemente como: cada vez que se llama al método __next__() del generador, se ejecutará en la siguiente declaración de rendimiento y devolverá el valor de la declaración. Cuando se ejecutan todas las declaraciones de rendimiento, el generador lanzará automáticamente una excepción StopIteration, indicando el final de la iteración.

Aquí hay un código de ejemplo para crear un generador usando la declaración de rendimiento:

def my_generator():
    for i in range(10):
        yield i*i

gen = my_generator()
print(list(gen))

En el código anterior, hemos creado un generador dentro de la función utilizando la declaración de rendimiento. Cada vez que se llama al método __next__() del generador, se ejecuta en la siguiente declaración de rendimiento y devuelve el valor de esa declaración. Finalmente, convertimos el generador en una lista usando la función list().

Ventajas de los generadores

Los generadores tienen las siguientes ventajas:

  • Cálculo perezoso: el generador no genera todos los datos al principio, sino que solo genera datos cuando es necesario, lo que puede ahorrar mucho espacio en la memoria.
  • Secuencia infinita: los generadores se pueden usar para generar secuencias infinitas, como la secuencia de Fibonacci, la secuencia de números primos, etc.
  • Se puede usar para transmitir: el generador se puede usar para transmitir grandes cantidades de datos, como leer archivos grandes, datos de red, etc.

Aquí hay un código de ejemplo que usa generadores para manejar archivos grandes:

def read_file(file_path):
    with open(file_path) as f:
        for line in f:
            yield line.strip()

for line in read_file("large_file.txt"):
    process(line)

En el código anterior, definimos un generador read_file(), que se usa para leer archivos grandes y devolver una línea de datos cada vez. Luego usamos un bucle for para recorrer el generador y procesar cada fila de datos.

Escenarios de aplicación de generadores

Los generadores se pueden utilizar en los siguientes escenarios:

  • Manejar grandes cantidades de datos, como archivos grandes, datos de red, etc.
  • Genera secuencias infinitas como números de Fibonacci, números primos, etc.
  • Implemente rutinas y programación asíncrona, como el uso de la biblioteca asyncio para implementar operaciones de E/S asíncronas.
  • Los generadores también se pueden usar para implementar los patrones de tubería y filtro, por ejemplo, usando generadores para implementar tuberías Unix.

Notas sobre generadores

Aunque los generadores tienen muchas ventajas, también deben prestar atención a lo siguiente:

  • El generador solo puede iterar una vez: el generador solo puede iterar una vez, porque una excepción StopIteration se lanza automáticamente después de que se completa la iteración.
  • Los generadores no pueden usar operaciones de división: dado que los generadores se evalúan de forma perezosa, las operaciones de división no se pueden usar, de lo contrario, el generador terminará prematuramente.
  • El generador debe cerrarse a tiempo: el generador debe cerrarse a tiempo después de su uso, de lo contrario, puede causar problemas como fugas de recursos y fugas de memoria.

5. Decorador de pitones

Un decorador es un azúcar sintáctico del lenguaje Python que se utiliza para modificar o mejorar la funcionalidad de una función o clase. El decorador en sí es una función que recibe una función como parámetro y devuelve una nueva función. La nueva función realiza algunas operaciones adicionales antes y después de llamar a la función original, y finalmente devuelve el valor de retorno de la función original. Los decoradores se pueden utilizar para registrar registros, temporizadores, cachés, control de permisos, mecanismos de reintento y otros escenarios. Al usar un decorador, debe prestar atención a la definición y las reglas de llamada de la función, los parámetros del decorador, el uso anidado y la conservación de la metainformación de la función original.

definicion de decorador

Un decorador es un azúcar sintáctico del lenguaje Python que se utiliza para modificar o mejorar la funcionalidad de una función o clase. Los decoradores pueden agregar dinámicamente funcionalidades adicionales a la función o clase original sin modificarlas.

El siguiente es un código de muestra que usa decoradores para mejorar la funcionalidad de las funciones:

def my_decorator(func):
    def wrapper():
        print("Before function call")
        func()
        print("After function call")
    return wrapper

@my_decorator
def my_function():
    print("Inside function")

my_function()

En el código anterior, definimos un decorador my_decorator para imprimir información antes y después de la llamada a la función. Luego usamos el azúcar sintáctico @my_decorator para aplicar el decorador a la función my_function.

Cómo trabajan los decoradores

El principio de funcionamiento del decorador se puede describir simplemente como: el decorador en sí mismo es una función, recibe una función como parámetro y luego devuelve una nueva función, la nueva función realiza algunas operaciones adicionales antes y después de llamar a la función original, y finalmente devuelve el valor de retorno de la función original.

El siguiente es un código de muestra que usa decoradores para mejorar la funcionalidad de las funciones:

def my_decorator(func):
    def wrapper():
        print("Before function call")
        func()
        print("After function call")
    return wrapper

@my_decorator
def my_function():
    print("Inside function")

my_function()

En el código anterior, el decorador my_decorator toma una función como argumento y devuelve un nuevo envoltorio de función. Cuando se llama a la función my_function(), en realidad se llama a la función wrapper(), que imprime cierta información antes y después de llamar a la función original y ejecuta la función original. Finalmente, la función wrapper() devuelve el valor de retorno de la función original.

Escenarios de aplicación de decoradores.

Los decoradores se pueden utilizar en los siguientes escenarios:

  • Registro: puede usar el decorador para registrar el registro de llamadas de la función, como registrar los parámetros, el valor devuelto, el tiempo de ejecución, etc. de la función.
  • Temporizador: se puede implementar un temporizador utilizando un decorador para calcular el tiempo de ejecución de una función.
  • Caché: se puede usar un decorador para implementar un caché para almacenar en caché los resultados de las llamadas a funciones para evitar cálculos repetidos.
  • Control de acceso: los decoradores se pueden usar para implementar un control de acceso, restringiendo solo usuarios o roles específicos para llamar a funciones.
  • Mecanismo de reintento: los decoradores se pueden utilizar para implementar un mecanismo de reintento. Cuando falla una llamada de función, se reintentará automáticamente varias veces.

El siguiente es un código de muestra que usa decoradores para implementar el almacenamiento en caché:

import functools

def cache(func):
    cache_dict = {}
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        key = args + tuple(kwargs.items())
        if key not in cache_dict:
            cache_dict[key] = func(*args, **kwargs)
        return cache_dict[key]
    return wrapper

@cache
def my_function(x, y):
    print("Calculating...")
    return x*y

print(my_function(2, 3))
print(my_function(2, 3))

En el código anterior, definimos un decorador de caché para almacenar en caché el resultado de la llamada a la función. Luego aplicamos el decorador a la función my_function usando el azúcar sintáctico @cache.

Nota sobre los decoradores

Hay algunas cosas a tener en cuenta al usar decoradores:

  • El decorador en sí también es una función, por lo que debe seguir las reglas de definición y llamada de la función.
  • Un decorador puede recibir parámetros, pero necesita definir otra capa de funciones dentro del decorador para recibir parámetros.
  • Los decoradores se pueden anidar, pero debe prestar atención al orden de las llamadas a funciones.
  • Los decoradores pueden usar la función functools.wraps() para conservar la metainformación de la función original, como el nombre de la función, la cadena de documentación, etc.

6. Comprensión de lista de Python y comprensión de diccionario

Las comprensiones de lista y las comprensiones de diccionario son una sintaxis de Python concisa y poderosa para generar nuevas listas y diccionarios. Ambos funcionan iterando sobre un objeto iterable a través de un bucle for, operando en cada elemento y agregando los resultados a una nueva lista o diccionario. Se pueden usar para filtrar datos, transformar datos, generar nuevas listas o diccionarios, y más. Cuando utilice la comprensión de listas y la comprensión de diccionarios, debe prestar atención a la legibilidad del código, la posición y condición de la instrucción if y el orden de la instrucción for.

Definición de comprensión de lista

Las comprensiones de listas son una sintaxis de Python concisa y poderosa para generar nuevas listas. Las comprensiones de lista a menudo pueden realizar operaciones de lista complejas con una sola línea de código.

Aquí hay un código de ejemplo que genera una nueva lista usando una lista por comprensión:

my_list = [x*x for x in range(10)]
print(my_list)

En el código anterior, usamos una lista de comprensión para generar una nueva lista que contiene cuadrados del 0 al 9.

Cómo funcionan las comprensiones de listas

El principio de funcionamiento de la comprensión de listas se puede describir simplemente como: iterar a través de un objeto iterable a través de un bucle for, operar en cada elemento y agregar el resultado a una nueva lista.

Aquí hay un código de ejemplo que genera una nueva lista usando una lista por comprensión:

my_list = [x*x for x in range(10)]
print(my_list)

En el código anterior, el bucle for itera sobre los enteros del 0 al 9, eleva al cuadrado cada entero y agrega el resultado a una nueva lista.

Escenarios de aplicación de la comprensión de listas

Las listas de comprensión se pueden utilizar en los siguientes escenarios:

  • Filtrar datos: puede usar la comprensión de listas para filtrar datos en listas según las condiciones.
  • Transformación de datos: puede usar la comprensión de listas para transformar datos en listas, como convertir una lista de cadenas en una lista de números enteros.
  • Generar nuevas listas: puede usar la comprensión de listas para generar nuevas listas, como generar secuencias de Fibonacci, secuencias de números primos, etc.

Aquí hay un código de ejemplo que convierte una lista de cadenas en números enteros usando una lista de comprensión:

my_list = ["1", "2", "3", "4", "5"]
new_list = [int(x) for x in my_list]
print(new_list)

En el código anterior, usamos una lista de comprensión para convertir los elementos en la lista de cadenas my_list en números enteros y almacenamos el resultado en una nueva lista new_list.

definición de comprensión del diccionario

Las comprensiones de diccionario son una sintaxis de Python concisa y poderosa para generar nuevos diccionarios. Las comprensiones de diccionario generalmente pueden realizar operaciones de diccionario complejas con una línea de código.

Aquí hay un código de ejemplo que genera un nuevo diccionario usando una comprensión de diccionario:

my_dict = {x: x*x for x in range(10)}
print(my_dict)

En el código anterior, usamos una comprensión de diccionario para generar un nuevo diccionario que contiene números enteros del 0 al 9 y sus cuadrados.

Cómo funcionan las comprensiones de diccionario

El principio de funcionamiento de la comprensión del diccionario se puede describir simplemente como: iterar sobre un objeto iterable a través de un bucle for, operar en cada elemento y agregar el resultado a un nuevo diccionario.

Aquí hay un código de ejemplo que genera un nuevo diccionario usando una comprensión de diccionario:

my_dict = {x: x*x for x in range(10)}
print(my_dict)

En el código anterior, el ciclo for itera sobre los enteros del 0 al 9, eleva al cuadrado cada entero y agrega el resultado a un nuevo diccionario.

Escenarios de aplicación de la comprensión del diccionario

Las comprensiones de diccionario se pueden utilizar en los siguientes escenarios:

  • Filtrar datos: puede usar comprensiones de diccionario para filtrar datos en diccionarios según las condiciones.
  • Conversión de datos: puede usar comprensiones de diccionario para convertir datos en un diccionario, como convertir valores de cadena en un diccionario a valores enteros.
  • Generar nuevos diccionarios: puede usar la comprensión de diccionarios para generar nuevos diccionarios, como convertir una lista en un diccionario, donde los elementos de la lista se usan como claves del diccionario y los elementos en otro objeto iterable se usan como valores del diccionario.

Aquí hay un código de ejemplo que usa comprensiones de diccionario para convertir valores de cadena en un diccionario a valores enteros:

my_dict = {"a": "1", "b": "2", "c": "3", "d": "4", "e": "5"}
new_dict = {k: int(v) for k, v in my_dict.items()}
print(new_dict)

En el código anterior, usamos comprensiones de diccionario para convertir los valores de cadena en el diccionario my_dict a valores enteros y almacenamos el resultado en un nuevo diccionario new_dict.

Notas sobre comprensiones de listas y comprensiones de diccionarios

Tenga en cuenta lo siguiente cuando utilice comprensiones de lista y comprensiones de diccionario:

  • Las comprensiones de lista y las comprensiones de diccionario se pueden anidar, pero debe prestar atención a la legibilidad del código.
  • Las comprensiones de lista y las derivaciones de diccionario se pueden filtrar mediante declaraciones if, y debe prestar atención a la posición y las condiciones de las declaraciones if.
  • La comprensión de listas y la comprensión de diccionarios se pueden anidar usando varias declaraciones for, y se debe prestar atención al orden de las declaraciones for.

7. Bibliotecas de programación funcional en Python

Hay muchas bibliotecas de programación funcional en Python, y cada biblioteca tiene sus propias características y escenarios aplicables. Entre ellos, functools e itertools son parte de la biblioteca estándar de Python, que se puede importar y usar directamente, y las funciones son relativamente simples; mientras que toolz, fn.py y PyMonad deben instalarse, proporcionando algunas funciones de programación funcional avanzadas, adecuadas para algunos escenarios complejos de programación funcional. Cuando se utiliza una biblioteca de programación funcional, es necesario seleccionar una biblioteca adecuada según el escenario específico para lograr el mejor efecto de programación.

Las siguientes son algunas bibliotecas de programación funcional de uso común y sus funciones, diferencias de uso, escenarios de uso, ventajas y desventajas, etc.:

herramientas funcionales

  • Rol funcional: proporciona algunas funciones de orden superior, como parcial, reducción, ajuste, etc., que pueden operar funciones fácilmente.
  • Diferencias de uso: functools es parte de la biblioteca estándar de Python y se puede importar y usar directamente sin instalación.
  • Escenarios de uso: se puede utilizar en escenarios como curry de funciones, decoradores de funciones y preservación de metainformación de funciones.
  • Ventajas: No requiere instalación, fácil de usar, rico en funciones.
  • Desventajas: la función es relativamente simple y no es adecuada para algunos escenarios de programación funcional complejos.

itertools

  • Rol funcional: proporciona algunas funciones de iterador, como producto, permutaciones, combinaciones, etc., que pueden generar fácilmente iteradores.
  • Diferencias de uso: itertools es parte de la biblioteca estándar de Python y se puede importar y usar directamente sin instalación.
  • Escenarios de uso: Se puede utilizar para generar permutaciones y combinaciones, productos cartesianos, iteraciones de bucle y otros escenarios.
  • Ventajas: No requiere instalación, fácil de usar, rico en funciones.
  • Desventajas: solo se proporcionan algunas funciones de iterador, lo que no es adecuado para algunos escenarios de programación funcional complejos.

herramientas

  • Rol funcional: proporciona algunas funciones de orden superior, como curry, componer, canalizar, etc., que pueden operar funciones fácilmente.
  • Diferencias de uso: es necesario instalar toolz y se puede instalar con el comando pip, como pip install toolz.
  • Escenarios de uso: se puede usar en escenarios como el procesamiento de funciones, la combinación de funciones y el cálculo perezoso.
  • Ventajas: proporciona algunas funciones avanzadas de programación funcional, adecuadas para algunos escenarios complejos de programación funcional.
  • Desventajas: Necesita ser instalado, y es un poco complicado de usar.

fn.py

  • Rol funcional: proporciona algunas funciones de orden superior, como curry, componer, zip_with, etc., que pueden operar funciones fácilmente.
  • Diferencia de uso: fn.py debe instalarse, puede usar el comando pip para instalar, como pip install fn.
  • Escenarios de uso: se puede usar en escenarios como el procesamiento de funciones, la combinación de funciones, los cálculos perezosos y las secuencias perezosas.
  • Ventajas: proporciona algunas funciones avanzadas de programación funcional, adecuadas para algunos escenarios complejos de programación funcional.
  • Desventajas: Necesita ser instalado, y es un poco complicado de usar.

PyMonad

  • Rol funcional: Proporcione algunos tipos monádicos básicos, como Quizás, Cualquiera, Estado, etc., que pueden realizar fácilmente el patrón monádico.
  • Diferencia de uso: PyMonad debe instalarse, puede usar el comando pip para instalar, como pip install PyMonad.
  • Escenarios de uso: se puede utilizar para implementar escenarios como patrones monádicos, manejo de excepciones en programación funcional y gestión de estado.
  • Ventajas: proporciona algunos tipos monádicos básicos para facilitar la implementación de patrones monádicos.
  • Desventajas: la función es relativamente simple y no es adecuada para algunos escenarios de programación funcional complejos.

Supongo que te gusta

Origin blog.csdn.net/Z__7Gk/article/details/131916901
Recomendado
Clasificación