Best practice voor standaardargumenten
Een van je collega’s (die deze cursus duidelijk niet heeft gevolgd) heeft deze functie geschreven om een kolom toe te voegen aan een pandas DataFrame. Helaas hebben ze een muteerbare variabele als standaardwaarde voor een argument gebruikt! Laat alsjeblieft zien hoe dit beter kan, zodat ze geen onverwacht gedrag krijgen.
def add_column(values, df=pandas.DataFrame()):
"""Add a column of `values` to a DataFrame `df`.
The column will be named "col_<n>" 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
"""
df['col_{}'.format(len(df.columns))] = values
return df
Deze oefening maakt deel uit van de cursus
Functies schrijven in Python
Oefeninstructies
- Verander de standaardwaarde van
dfnaar een immuteerbare waarde om best practices te volgen. - Pas de code van de functie aan zodat er een nieuw DataFrame wordt gemaakt als de aanroeper er geen heeft doorgegeven.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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