Dalam bahasa pemrograman Python, *args dan **kwargs digunakan untuk membuat fungsi yang fleksibel dan dinamis. Keduanya memungkinkan kita mengirim jumlah argumen yang tidak diketahui ke dalam suatu fungsi. Konsep ini sangat berguna dalam situasi ketika kita tidak tahu pasti berapa banyak nilai yang akan diterima fungsi, seperti dalam pembuatan API, logging, atau pembuatan modul yang reusable.
1. Apa itu *args?
*args digunakan untuk mengirim sejumlah argumen non-keyword (positional arguments) ke dalam fungsi. Dalam bentuk tuple, semua nilai argumen yang dikirim akan dikumpulkan menjadi satu variabel yang diawali dengan tanda bintang (*).
Contoh sederhana penggunaan *args:
def jumlahkan(*args):
total = 0
for angka in args:
total += angka
return total
print(jumlahkan(1, 2, 3))
print(jumlahkan(10, 20, 30, 40))
Penjelasan: Fungsi jumlahkan() dapat menerima jumlah argumen berapa pun. Ketika kita memanggil fungsi dengan jumlahkan(1, 2, 3), Python akan mengonversi nilai-nilai tersebut menjadi tuple seperti (1, 2, 3). Dengan demikian, fungsi menjadi sangat fleksibel.
2. Apa itu **kwargs?
**kwargs digunakan untuk menangani argumen bertipe keyword (key-value). Semua pasangan argumen tersebut akan dikumpulkan menjadi dictionary. Ini sangat berguna ketika kita ingin menerima parameter opsional dengan nama tertentu.
Contoh penggunaan **kwargs:
def cetak_data(**kwargs):
for key, value in kwargs.items():
print(f"{key} = {value}")
cetak_data(nama="Rysa", umur=25, kota="Bandung")
Penjelasan: Ketika fungsi cetak_data() dipanggil dengan keyword arguments seperti nama="Rysa" dan umur=25, Python akan mengubahnya menjadi dictionary: {'nama': 'Rysa', 'umur': 25, 'kota': 'Bandung'}.
3. Menggabungkan *args dan **kwargs
Kita juga dapat menggunakan *args dan **kwargs secara bersamaan dalam satu fungsi. Biasanya, urutannya harus: positional arguments → *args → keyword arguments → **kwargs.
def profil_pengguna(nama, *args, **kwargs):
print(f"Nama utama: {nama}")
print("Data tambahan:")
for arg in args:
print("-", arg)
print("Info detail:")
for key, value in kwargs.items():
print(f"{key}: {value}")
profil_pengguna(
"Ali",
"Programmer", "Python Developer",
umur=28, kota="Jakarta", status="Aktif"
)
Penjelasan: Parameter pertama adalah argumen wajib nama, diikuti oleh *args untuk data tambahan, dan **kwargs untuk data berformat key-value. Hasilnya, fungsi bisa menangani berbagai jenis input tanpa harus mengubah strukturnya.
4. Contoh Kasus Nyata Penggunaan
Misalkan kita ingin membuat fungsi logging yang bisa menerima berbagai jenis data untuk mencatat aktivitas aplikasi. Kita bisa memanfaatkan kombinasi *args dan **kwargs untuk membuat fungsi yang fleksibel.
import datetime
def log_event(*args, **kwargs):
waktu = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(f"[{waktu}] EVENT:", *args)
for key, value in kwargs.items():
print(f" - {key}: {value}")
log_event("User login", user="admin", ip="192.168.1.10")
log_event("File uploaded", filename="report.pdf", size="2MB", status="Success")
Penjelasan: Fungsi log_event() mencetak waktu dan pesan utama, lalu menampilkan detail argumen tambahan secara dinamis. Fungsi ini bisa digunakan di berbagai proyek tanpa perlu mendefinisikan ulang parameter secara spesifik.
5. Kelebihan Menggunakan *args dan **kwargs
- Memungkinkan pembuatan fungsi yang fleksibel dan dinamis.
- Meningkatkan keterbacaan dan efisiensi kode.
- Sangat cocok untuk library, framework, dan modul yang menerima parameter tidak tetap.
- Memudahkan dalam pengembangan API atau sistem plugin.
6. Tips dan Best Practice
- Gunakan *args hanya untuk argumen posisi (tanpa nama).
- Gunakan **kwargs untuk parameter yang memerlukan label atau nama.
- Gunakan nama variabel yang deskriptif seperti
*dataatau**infojika sesuai konteks. - Jangan mencampur urutan parameter (
*argsharus selalu sebelum**kwargs).
Kesimpulan
*args dan **kwargs adalah fitur kuat dalam Python yang memberikan fleksibilitas tinggi dalam pembuatan fungsi. Dengan menggunakannya, developer dapat membuat kode yang lebih efisien, reusable, dan mudah diadaptasi untuk berbagai skenario. Pemahaman mendalam tentang keduanya sangat penting bagi siapa pun yang ingin menjadi programmer Python profesional.