Dada una cadena comocrear una función lambda de una cadena ** ** adecuadamente
"2*(i+j) <= 100"
quiero para generar la función lambda correspondiente,
fn = lambda i,j: 2*(i+j) <= 100
puedo hacer esto con
eval
, pero estoy buscando un método menos malo.he encontrado
import ast f = ast.Lambda('i,j', '2*(i+j) <= 100')
pero no he encontrar la manera de ejecutar el resultado!
Idealmente, me gustaría extraer automáticamente la lista de parámetros ('i', 'j') también - en este momento, solo estoy usando re.findall ('\ w +'), pero me encantaría para poder usar correctamente funciones existentes como
cos
en lugar de sombrearlas como 'palabras clave'.
estaba mirando Is there a Python library for handling complicated mathematical sets (constructed using mathematical set-builder notation)? y tratando de averiguar la mejor manera de analizar la notación de conjuntos constructor en las lambdas para alimentar a la restricción-solver.
Básicamente estoy deseando ast.literal_eval que también reconozca las variables.
Idealmente, dado i >= 20
me gustaría volver ((lambda x: x >= 20), ['i'])
que podría alimentar directamente al constraint
.
¿Cuál es el problema que estás tratando de resolver? ¿Estás haciendo un bucle de lectura e interpretación gp? – starbolin