GOOGLE ADS

sábado, 23 de abril de 2022

Python niega la función booleana

Una función booleana de python se puede negar fácilmente con funciones lambda, pero es un poco detallada y difícil de leer para algo tan básico, por ejemplo:

def is_even(n):
return n % 2 == 0
odds_under_50 = filter(lambda x: not is_even(x), range(50))

Me pregunto si hay una función para hacer esto en la biblioteca estándar, que podría verse así:

odds_under_50 = filter(negate(is_even), range(50))


Solución del problema

Hasta donde yo sé, no hay una función integrada para eso, o una biblioteca popular que lo haga.

Sin embargo, puedes escribir fácilmente uno tú mismo:

from functools import wraps
def negate(f):
@wraps(f)
def g(*args,**kwargs):
return not f(*args,**kwargs)
g.__name__ = f'negate({f.__name__})'
return g

A continuación, puede utilizar:

odds_under_50 = filter(negate(is_even), range(50))

La negatefunción funciona para una cantidad arbitraria de parámetros de la función dada: si hubiera definido is_dividable(x,n=2). Entonces negate(is_dividable)es una función con dos argumentos (uno opcional) que también aceptaría estos parámetros.

No hay comentarios:

Publicar un comentario

Regla de Firestore para acceder a la generación de subcolección Permisos faltantes o insuficientes

Tengo problemas con las reglas de Firestore para permitir el acceso a algunos recursos en una subcolección. Tengo algunos requests document...