[pyar] Logica repetida en metodos

Pablo Ziliani pablo en kultroom.com
Jue Dic 2 23:41:16 ART 2010


On 12/02/2010 10:55 PM, Lucas Liendo wrote:
> Hola ! Queria consultarles por una duda, resulta que tengo que hacer 
> algunos metodos los cuales todos tienen la misma logica, salvo en un 
> solo punto, el cual es una condicion, para resolverlo se me ocurrio 
> algo asi :
>
> def funcion_dep(cond) :
>     if eval(cond) :
>         print "truep"
>     else :
>         print "falsep"
>
> def condicion_1(n1, n2) :
>     if n1 > n2 :
>         return 1
>
>     return 0
>
> def condicion_2(n1, n2) :
>     if n1 < n2 :
>         return 1
>
>     return 0
>
> if __name__ == "__main__" :
>     funcion_dep("condicion_1(1, 2)")
>     funcion_dep("condicion_2(1, 2)")
>
> es decir evaluo la condicion en otro metodo a traves de eval, lo que 
> queria saber es si hay otra alternativa al eval (ya que estoy 
> disconforme con esta solucion). Bueno eso es todo !

Hola Lucas, no me queda claro qué querés lograr. Si en tu punto de 
entrada vas a tener siempre strings como las que en el ejemplo le estás 
pasando a funcion_dep(), estás atado a algún tipo de evaluación, con o 
sin eval(). Si el uso del eval en cambio es sólo la forma que se te 
ocurrió para postergar la ejecución de las funciones condicion_1() y 
condicion_2() tenés mil alternativas, la más simple siendo que las 
condiciones devuelvan una función, ej:

 >>> def condicion_1(n1, n2):
...     return lambda: n1 > n2
...
 >>> def condicion_2(n1, n2):
...     return lambda: n1 < n2
...
 >>> def funcion_dep(cond):
...     print "truep" if cond() else "falsep"
...
 >>> funcion_dep(condicion_1(1,2))
falsep
 >>> funcion_dep(condicion_1(3,2))
truep

Donde ves labda podés usar cualquier función, basta que crees el closure 
anidando la definición en la condición. Yo usé lambda sólo por brevedad. 
Fijate que las condiciones se evalúan recién dentro de funcion_dep().

Saludos,
Pablo



More information about the pyar mailing list