Bune practici pentru argumentele implicite
Unul dintre colegii tăi (care evident nu a urmat acest curs) a scris această funcție pentru a adăuga o coloană la un DataFrame pandas. Din păcate, a folosit o variabilă mutabilă ca valoare implicită pentru un argument! Arată-i o modalitate mai bună, astfel încât să evite comportamente neașteptate.
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
Acest exercițiu face parte din cursul
Scrierea funcțiilor în Python
Instrucțiuni pentru exercițiu
- Schimbă valoarea implicită a parametrului
dfcu una imutabilă, urmând bunele practici. - Actualizează codul funcției astfel încât un nou DataFrame să fie creat dacă apelantul nu a transmis unul.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
# 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