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