Lompati ke konten utama
Modul 5 · Pelajaran 3 dari 419/36 dalam kursus~12 min
Pelajaran modul (3/4)

*argumen dan **kwarg

Terkadang Anda menginginkan fungsi yang menerima jumlah variabel argumen. Python memberi Anda dua alat: *args (mengumpulkan argumen posisi menjadi Tuple) dan **kwargs (mengumpulkan argumen kata kunci ke dalam dict).

*args: argumen posisi variabel

Python
def somma_tutto(*nums):
    totale = 0
    for n in nums:
        totale += n
    return totale

somma_tutto(1, 2, 3)         # 6
somma_tutto(1, 2, 3, 4, 5)   # 15
somma_tutto()                # 0

Di dalam fungsi, nums adalah tupel dengan semua nilai diteruskan. Itu nama hanyalah sebuah konvensi: *args adalah yang paling umum, tetapi *nums atau *valori benar-benar valid.

**kwargs: argumen kata kunci variabel

Python
def crea_config(**opzioni):
    return opzioni

crea_config(debug=True, port=8080)
# {'debug': True, 'port': 8080}

Di dalam fungsinya, opzioni adalah dikt dengan {param_name: value}.

Menggabungkan segalanya

Urutan tetapnya adalah: **parameter reguler, *args, parameter default, **kwargs**.

Python
def f(primo, *args, opzione="x", **kwargs):
    print(primo, args, opzione, kwargs)

f(1, 2, 3, opzione="y", extra=10)
# 1 (2, 3) y {'extra': 10}

Membongkar dalam panggilan: * dan **

Operator yang sama bekerja sebaliknya: untuk "meledakkan" daftar/Tuple menjadi argumen posisi atau dict menjadi argumen kata kunci.

Python
def punto(x, y, z):
    return (x, y, z)

coords = [1, 2, 3]
punto(*coords)        # punto(1, 2, 3)  →  (1, 2, 3)

opts = {"x": 1, "y": 2, "z": 3}
punto(**opts)         # punto(x=1, y=2, z=3)

Pola pembungkus

Python
def log_chiamata(fn, *args, **kwargs):
    print(f"chiamo {fn.__name__} con {args=} {kwargs=}")
    return fn(*args, **kwargs)

log_chiamata(max, 3, 1, 2)             # calls max(3, 1, 2)
log_chiamata(sorted, [3, 1, 2], reverse=True)

Pengurutan parameter dalam tanda tangan fungsi

Saat mendefinisikan fungsi yang menerima beberapa tipe argumen, Anda harus mematuhi urutan ketat dalam tanda tangan:

  1. Parameter posisi standar.
  2. Vararg posisi *args.
  3. Parameter kata kunci dengan nilai default.
  4. Vararg kata kunci **kwargs.

Cobalah

Latihan#python.m5.l3.e1
Upaya: 0Memuat…

Tentukan `rata-rata(*angka)` yang mengembalikan rata-rata aritmatika (jumlah / hitungan). Sebut saja dengan 10, 20, 30 dan tetapkan hasilnya ke `m`. Evaluasi `m`.

Memuat editor…
Tunjukkan petunjuk

jumlah(angka) / len(angka)

Solusi tersedia setelah 3 upaya

Tinjau latihan

Latihan#python.m5.l3.e2
Upaya: 0Memuat…

Mengingat fungsi `def point(x, y, z): return x + y + z` dan dict `coords = {'x': 1, 'y': 2, 'z': 3}`, panggil titik unpacking coords dan tetapkan hasilnya ke `s`. Evaluasi `s`.

Memuat editor…
Tunjukkan petunjuk

titik(**koord)

Solusi tersedia setelah 3 upaya

Tantangan tambahan

Latihan#python.m5.l3.e3
Upaya: 0Memuat…

Write a function `multiply_all(*args)` that returns the product of all numbers passed as arguments. If no arguments are passed, it should return `1`. Finally, evaluate the call `multiply_all(2, 3, 4)`.

Memuat editor…
Tunjukkan petunjuk

Gunakan perulangan for untuk mengulangi elemen dalam argumen dan mengakumulasi produknya.

Solusi tersedia setelah 3 upaya