Ini bukan operator, jadi tidak benar - benar memiliki nama, tetapi didefinisikan sebagai "aturan sintaksis" . Jadi itu harus disebut:
- "argumen kata kunci membongkar sintaks"
Jika Anda memiliki daftar argumen,, *args
itu disebut "argument unpacking" , dengan cara yang sama **kwargs
disebut "argumen argumen unpacking" .
Jika Anda menggunakannya di sisi kiri =
, seperti pada a, *middle, end = my_tuple
, Anda akan mengatakan "tuple unpacking" .
Secara total, ada tiga jenis argumen (parameter tunggal):
def f(x) # x: positional argument
def f(x, y=0) # y: keyword argument
def f(x, *xs, y=0) # y: keyword-only argument
The *args
argumen disebut "variabel posisi parameter" dan **kwargs
adalah "parameter kunci variabel". Argumen khusus kata kunci tidak dapat diberikan secara posisi, karena parameter posisi variabel akan mengambil semua argumen yang Anda berikan.
Sebagian besar ini dapat ditemukan di PEPs 0362 dan 3102 , serta di bagian Aliran Kontrol dokumen. Perlu dicatat bahwa objek tanda tangan fungsi PEP hanya konsep, dan terminologi mungkin hanya ide satu orang. Tapi toh itu istilah yang bagus. :)
Jadi argumen *
dan **
hanya membongkar struktur data masing-masing:
args = (1, 2, 3) # usually a tuple, always an iterable[1]
f(*args) → f(1, 2, 3)
# and
kwargs = {"a": 1, "b": 2, "c": 3} # usually a dict, always a mapping*
f(**kwargs) -> f(a=1, b=2, c=3)
[1]: Iterables adalah objek yang mengimplementasikan __iter__()
metode dan pemetaan adalah objek yang mengimplementasikan keys()
dan __getitem__()
. Setiap objek yang mendukung protokol ini akan dipahami oleh konstruktor tuple()
dan dict()
, sehingga mereka dapat digunakan untuk membongkar argumen.