Praktik terbaik untuk argumen default
Salah satu rekan kerja Anda (yang jelas belum mengambil kursus ini) menulis fungsi untuk menambahkan kolom ke pandas DataFrame. Sayangnya, ia menggunakan variabel yang dapat diubah sebagai nilai argumen default! Tunjukkan cara yang lebih baik agar mereka tidak mendapatkan perilaku yang tidak terduga.
def add_column(values, df=pandas.DataFrame()):
"""Tambahkan satu kolom `values` ke DataFrame `df`.
Kolom akan diberi nama "col_<n>" di mana "n" adalah
indeks numerik kolom tersebut.
Args:
values (iterable): Nilai untuk kolom baru
df (DataFrame, optional): DataFrame yang akan diperbarui.
Jika tidak ada DataFrame yang diberikan, satu akan dibuat secara default.
Returns:
DataFrame
"""
df['col_{}'.format(len(df.columns))] = values
return df
Latihan ini adalah bagian dari kursus
Menulis Function di Python
Petunjuk latihan
- Ubah nilai default
dfmenjadi nilai yang tidak dapat diubah (immutable) untuk mengikuti praktik terbaik. - Perbarui kode fungsi sehingga DataFrame baru dibuat jika pemanggil tidak memberikannya.
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
# 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