[pyar] Logica repetida en metodos

Pablo Ziliani pablo en kultroom.com
Vie Dic 3 00:12:47 ART 2010


On 12/02/2010 11:41 PM, Pablo Ziliani wrote:
> 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 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().

(reacción tardía)
Por otro lado, si no te interesa desacoplar funcion_dep() de 
condicion_n() a esa altura estás a un paso del decorador:

 >>> def funcion_dep(f):
...     def condicion(*args):
...             print "esto se ejecuta antes de evaluar la condición"
...             if f(*args):
...                     print "truep"
...             else:
...                     print "falsep"
...             print "esto se ejecuta después de evaluar la condición"
...
...     return condicion
...
 >>> @funcion_dep
... def condicion_1(n1, n2):
...     return n1 > n2
...
 >>> @funcion_dep
... def condicion_2(n1, n2):
...     return n1 < n2
...
 >>> condicion_1(1,2)
esto se ejecuta antes de evaluar la condición
falsep
esto se ejecuta después de evaluar la condición
 >>> condicion_2(1,2)
esto se ejecuta antes de evaluar la condición
truep




More information about the pyar mailing list