dan membenarkan fungsi menerima argumen. mengumpulkan argumen tambahan ke dalam tuple; mengumpulkan argumen tambahan ke dalam dict. (Nama adalah konvensi — dan adalah yang penting.)
dan membenarkan fungsi menerima argumen. mengumpulkan argumen tambahan ke dalam tuple; mengumpulkan argumen tambahan ke dalam dict. (Nama adalah konvensi — dan adalah yang penting.)
*args**kwargs*args**kwargs***def total(*args): # collects all positional args into a tuple
print(args) # e.g. (1, 2, 3)
return sum(args)
total(1, 2, 3) # 6
total(1, 2, 3, 4, 5) # 15 — any number of args
def configure(**kwargs): # collects keyword args into a dict
print(kwargs) # e.g. {"host": "localhost", "port": 8080}
for key, value in kwargs.items():
print(f"{key} = {value}")
configure(host="localhost", port=8080, debug=True)
def func(a, b, *args, **kwargs):
# a, b → required positional
# args → extra positional (tuple)
# kwargs → extra keyword (dict)
...
func(1, 2, 3, 4, x=5, y=6)
# a=1, b=2, args=(3, 4), kwargs={"x": 5, "y": 6}
Urutan yang diperlukan adalah: regular params, kemudian *args, kemudian **kwargs.
# `*` and `**` also UNPACK collections INTO arguments at the call site
numbers = [1, 2, 3]
total(*numbers) # same as total(1, 2, 3)
settings = {"host": "x", "port": 80}
configure(**settings) # same as configure(host="x", port=80)
Sintaks yang sama membuka list/dict menjadi argumen positional/keyword — berguna untuk meneruskan argumen.
def wrapper(*args, **kwargs):
# accept ANY arguments and pass them through unchanged
return original_func(*args, **kwargs)
Pola pass-through ini adalah bagaimana dekorator dan fungsi pembungkus menangani tanda tangan fungsi apa pun.
*args/**kwargs memungkinkan tanda tangan fungsi yang fleksibel yang dapat menerima jumlah argumen apa pun — penting untuk menulis utilitas tujuan umum, pembungkus, dan terutama dekorator (yang harus membungkus fungsi dengan tanda tangan yang tidak diketahui melalui *args, **kwargs).
Arah unpacking (*list, **dict) sama bergunanya untuk meneruskan atau menyebarkan argumen.
Pemahaman tentang pengumpulan dan unpacking keduanya adalah kunci untuk menulis kode Python yang dapat digunakan kembali dan generik serta membaca banyak API perpustakaan dan dekorator yang bergantung pada fitur-fitur ini.