Ana içeriğe geç
Modül 5 · Ders 3 ders 4Kurstaki 19/36~12 min
Modül dersleri (3/4)

*args ve **kwargs

Bazen değişken sayısını kabul eden bir işlev istersiniz. argümanlar. Python size iki araç sunar: *args (konumsal argümanları toplar bir demet içine) ve **kwargs (anahtar kelime argümanlarını bir dikte halinde toplar).

*args: değişken konumsal argümanlar

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

Fonksiyonun içinde, nums tüm değerlerin aktarıldığı bir demet'tir. ad yalnızca bir kuraldır: *args en yaygın olanıdır, ancak *nums veya *valori tamamen geçerlidir.

**kwargs: değişken anahtar kelime argümanları

Python
def crea_config(**opzioni):
    return opzioni

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

Fonksiyonun içinde, opzioni, {param_name: value} içeren bir dict'dir.

Her şeyi birleştirmek

Sabit sıra şu şekildedir: **normal parametreler, *args, varsayılan parametreler, **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}

Görüşmede paketin açılması: * ve **

Aynı operatör tam tersi şekilde çalışır: bir listeyi/tuple'ı "patlatmak" için konumsal argümanlara veya anahtar kelime argümanlarına bir dikte.

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)

Sarma deseni

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)

İşlev imzalarında parametre sıralaması

Birden fazla bağımsız değişken türünü kabul eden bir işlevi tanımlarken imzada katı bir sıraya uymanız gerekir:

  1. Standart konumsal parametreler.
  2. Konumsal değişkenler *args.
  3. Varsayılan değerlere sahip anahtar kelime parametreleri.
  4. Anahtar kelime **kwargs varargs.

Deneyin

Egzersiz#python.m5.l3.e1
Denemeler: 0Yükleniyor…

Aritmetik ortalamayı (toplam / sayım) döndüren 'ortalama(*sayılar)'ı tanımlayın. 10, 20, 30 ile çağırın ve sonucu 'm'ye atayın. 'm'yi değerlendirin.

Düzenleyici yükleniyor…
İpucu göster

toplam(sayılar) / len(sayılar)

3 denemeden sonra çözüm mevcut

Alıştırmayı gözden geçirin

Egzersiz#python.m5.l3.e2
Denemeler: 0Yükleniyor…

`def point(x, y, z) fonksiyonu göz önüne alındığında: x + y + z`yi döndürün ve dict `coords = {'x': 1, 'y': 2, 'z': 3}`, çağrı noktası açma koordinatlarını çağırın ve sonucu `s`ye atayın. 'leri' değerlendirin.

Düzenleyici yükleniyor…
İpucu göster

nokta(**kodlar)

3 denemeden sonra çözüm mevcut

Ek zorluk

Egzersiz#python.m5.l3.e3
Denemeler: 0Yükleniyor…

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)`.

Düzenleyici yükleniyor…
İpucu göster

Arg'lardaki öğeler üzerinde yineleme yapmak ve bunların çarpımlarını biriktirmek için bir for döngüsü kullanın.

3 denemeden sonra çözüm mevcut