[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