[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