[pyar] Refactoring de una función

Sebastian Bassi sbassi en google.com
Lun Jul 9 14:18:41 -03 2018


No sé que es mejor, pero si queres evitar esos 2 if que tenes ahi, podes
poner un

yield (plt, label)

antes del if not superpuestos (y borrar ese if porque la parte de graficar
queda afuera):

asi haces un generador en lugar de una funcion y el hecho de grabar 1 o
multiples juntos lo decidis por afuera, al momento de llamarla, tambien le
sacas el parametro superpuestos, formato y dpi, algo asi:

Si queres separados, la llamas asi:

for plt, label in ftir_plot(used_oil_name_list):
    plt.savefig(os.path.join(INIT_DIR, 'ftir_{}.{}'.format(label,
formato)), dpi=dpi)
    plt.close()

Si queres superpuestos:

for plt, _ in ftir_plot(used_oil_name_list):
    pass
plt.savefig(os.path.join(INIT_DIR,'ftir_.{}'.format(formato)), dpi=dpi)
plt.close()




On Mon, Jul 9, 2018 at 8:51 AM Luis Andraschnik <luis.andraschnik at gmail.com>
wrote:

> Hola gente!
>
> Tengo esta función que toma como argumentos una lista de archivos de
> espectros y grafica según los valores de los parámetros en un archivo único
> (superpuestos) o separados en archivos individuales. A fin de no repetir
> código lo hago en una única función y sólo cambia el final. El cambio es
> muy sutil, la posición del if define si se cierra el plot y se guarda el
> arhchivo. y sólo cambia qué nombre le asigno a/los archivo/s. Me parece que
> falta claridad, un error de indentado me cambia el resultado.
>
> Cómo de puede refactorizar para que quede más claro?
> Se puede utilizar el patrón de diseño Template? Cómo?
>
> Saludos
>
> import os
> import matplotlib.pyplot as plt
> INIT_DIR=os.getcwd()
>
>
> def ftir_plot(used_oil_name_list, formato='png', absorbancia=True,
> superpuestos=True, dpi=300):
>     '''Grafica espectros infrarrojos
>     formato : 'png','jpg', 'pdf', etc
>     absorbancia : True, eje Y absorbancia, False, eje Y transmitancia,
>     superpuestos: True, se grafica todo en un mismo archivo,
>         False, cada espectro en un archivo separado,
>     dpi: resolución en pixels por pulgada.
>     '''
>     mpl_fig = plt.figure()
>     ax = mpl_fig.add_subplot(111)
>     for used_oil in used_oil_name_list:
>         espectro = cargar_espectro(used_oil)
>         x_range = espectro.index # Wavenumbers
>         if absorbancia:
>             y_range = espectro['abs'] # Absorbancia/Transmitancia
>         else:
>             y_range = absorbancia_to_transmitancia(espectro['abs'])
>
>         # grafico el espectro
>         estilo(absorbancia)
>         label = name_for_legend(used_oil)
>         plt.plot(x_range, y_range, '-', label = label)
>         plt.legend(loc=0)
>         if not superpuestos:
>             plt.savefig(os.path.join(INIT_DIR, 'ftir_{}.{}'.format(label,
> formato)), dpi=dpi)
>             plt.close()
>
>     if superpuestos:
>         plt.savefig(os.path.join(INIT_DIR,'ftir_.{}'.format(formato)),
> dpi=dpi)
>         plt.close()
> _______________________________________________
> Lista de Correo de PyAr - Python Argentina - pyar at python.org.ar
> Sitio web: http://www.python.org.ar/
>
> Para administrar la lista (o desuscribirse) entrar a
> http://listas.python.org.ar/listinfo/pyar
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar



-- 
Sebastian Bassi
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20180709/22ae9854/attachment-0001.html>


Más información sobre la lista de distribución pyar