Buone pratiche per gli argomenti di default
Un tuo collega (che chiaramente non ha seguito questo corso) ha scritto questa funzione per aggiungere una colonna a un DataFrame di pandas. Purtroppo ha usato una variabile mutabile come valore predefinito di un argomento! Mostragli un modo migliore per farlo, così da evitare comportamenti imprevisti.
def add_column(values, df=pandas.DataFrame()):
"""Aggiunge una colonna di `values` a un DataFrame `df`.
La colonna verrà chiamata "col_<n>" dove "n" è
l'indice numerico della colonna.
Argomenti:
values (iterable): I valori della nuova colonna
df (DataFrame, opzionale): Il DataFrame da aggiornare.
Se non viene passato alcun DataFrame, ne viene creato uno per default.
Restituisce:
DataFrame
"""
df['col_{}'.format(len(df.columns))] = values
return df
Questo esercizio fa parte del corso
Scrivere funzioni in Python
Istruzioni dell'esercizio
- Cambia il valore predefinito di
dfin un valore immutabile per seguire le buone pratiche. - Aggiorna il codice della funzione in modo che venga creato un nuovo DataFrame se chi la chiama non ne passa uno.
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
# Use an immutable variable for the default argument
def better_add_column(values, df=____):
"""Add a column of `values` to a DataFrame `df`.
The column will be named "col_" where "n" is
the numerical index of the column.
Args:
values (iterable): The values of the new column
df (DataFrame, optional): The DataFrame to update.
If no DataFrame is passed, one is created by default.
Returns:
DataFrame
"""
# Update the function to create a default DataFrame
if ____ is ____:
df = pandas.DataFrame()
df['col_{}'.format(len(df.columns))] = values
return df