dan memungkinkan fungsi menerima argumen. mengumpulkan argumen tambahan ke dalam tuple; mengumpulkan argumen tambahan ke dalam dict. (Nama adalah konvensi — dan adalah yang penting.)
dan memungkinkan 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: parameter reguler, lalu *args, lalu **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 ke argumen posisional/kata kunci — 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 wrapper menangani tanda tangan fungsi apa pun.
*args/**kwargs memungkinkan tanda tangan fungsi yang fleksibel yang menerima sejumlah argumen — penting untuk menulis utilitas tujuan umum, wrapper, dan terutama dekorator (yang harus membungkus fungsi dengan tanda tangan tidak dikenal melalui *args, **kwargs).
Arah unpacking (*list, **dict) sama berguna untuk meneruskan atau menyebarkan argumen.
Memahami baik pengumpulan maupun unpacking adalah kunci untuk menulis kode Python yang dapat digunakan kembali dan umum serta membaca banyak API perpustakaan dan dekorator yang mengandalkan fitur-fitur ini.