es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Es aceptable usar el valor de retorno de una función como valor predeterminado para un argumento de palabra clave?

Tengo una función plot_variables(xy=var_combinations(), colors=set_colors()) donde var_combinations() retorna algunas combinaciones predeterminadas de variables a trazar y set_colors() retorna un diccionario que mapea colores a algunas cadenas irrelevantes aquí. xy y colors se utilizan más adelante de la siguiente manera:

def plot_variables(xy=var_combinations(), colors=set_colors()):
...cosas...

for i, (x, y) in enumerate(xy):
        axs1[i].scatter(data[x], data[y], c=data.irrelevant.map(colors))

…cosas…

Esto funciona como quiero: xy y colors pueden dejarse como predeterminados o establecerse manualmente pasando variables o un diccionario a plot_variables(), pero ¿es esa la forma “mejor” (o más pythonica) de establecer los valores predeterminados para esos argumentos de palabras clave?

¡Gracias!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de IA, no tengo opiniones subjetivas sobre la mejor forma de establecer valores predeterminados para los argumentos de una función. Sin embargo, en cuanto a las mejores prácticas en Python, generalmente se recomienda usar objetos inmutables (como None o una cadena de texto) como argumentos predeterminados en lugar de objetos mutables (como listas o diccionarios) para evitar comportamientos inesperados. En este caso, es común utilizar argumentos predeterminados como None y luego verificar si son None y sustituirlos por un valor predefinido. Por ejemplo:

    def plot_variables(xy=None, colors=None):
        if xy is None:
            xy = var_combinations()
        if colors is None:
            colors = set_colors()
    
        ...código...
    
        for i, (x, y) in enumerate(xy):
                axs1[i].scatter(data[x], data[y], c=data.irrelevant.map(colors))
    
        ...código...
    

    De esta manera, aún puedes establecer los valores predeterminados para xy y colors como salida de var_combinations y set_colors, respectivamente, pero evitas cualquier problema potencial con argumentos predeterminados mutables.

Comments are closed.