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

Varsayılan ve anahtar kelime parametreleri

İşlev parametreleri varsayılan değerlere sahip olabilir: arayan kişi geçemezse varsayılanlar kullanılır. Ayrıca parametreleri geçen bir işlevi de çağırabilirsiniz. ada göre (anahtar kelime bağımsız değişkenleri).

Varsayılan parametreler

Python
def saluta(nome, saluto="Ciao"):
    return f"{saluto}, {nome}!"

saluta("Ada")              # 'Ciao, Ada!'
saluta("Ada", "Hello")     # 'Hello, Ada!'

Varsayılanlara sahip parametreler, aşağıdakilere sahip olmayanlardan sonra gelmelidir:

Python
def f(a, b=1):     # OK
def f(a=1, b):     # SyntaxError

Anahtar kelime bağımsız değişkenleri

Argümanları isme göre herhangi bir sırayla iletebilir, böylece aramayı daha fazla yapabilirsiniz okunabilir:

Python
def crea_utente(nome, eta, attivo=True):
    return {"nome": nome, "eta": eta, "attivo": attivo}

crea_utente("Ada", 36)
crea_utente(nome="Ada", eta=36, attivo=False)
crea_utente(eta=36, nome="Ada")     # any order when all are keyword

Altın kural: Bir çağrıda konumsal argümanlar, anahtar kelime argümanlarından ÖNCE gelir.

Python
crea_utente("Ada", eta=36)            # OK
crea_utente(nome="Ada", 36)           # SyntaxError

⚠️ Değişken varsayılan tuzak

ASLA değiştirilebilir bir nesneyi (liste, dict, set) varsayılan değer olarak kullanmayın: varsayılan, işlev tanımlandığında ve tüm kullanıcılar arasında paylaşıldığında BİR KEZ değerlendirilir tüm çağrılar.

Python
def aggiungi(elemento, lista=[]):   # BUG!
    lista.append(elemento)
    return lista

aggiungi(1)    # [1]
aggiungi(2)    # [1, 2]    !!! not [2] as you'd expect
aggiungi(3)    # [1, 2, 3]

Doğru kalıp: None'yi nöbetçi olarak kullanın ve içinde oluşturun:

Python
def aggiungi(elemento, lista=None):
    if lista is None:
        lista = []
    lista.append(elemento)
    return lista

Değişken varsayılan argümanların tehlikesi

Değiştirilebilir nesneleri (listeler veya sözlükler gibi) asla parametreler için varsayılan değerler olarak kullanmayın: örneğin def add(x, my_list=[]). Varsayılan değer, işlev tanımlandığında yalnızca bir kez değerlendirilir; bu, sonraki çağrıların tam olarak aynı değiştirilebilir nesneyi paylaşacağı anlamına gelir! En iyi uygulama None kullanmaktır:

Python
def add(x, my_list=None):
    if my_list is None:
        my_list = []
    my_list.append(x)
    return my_list

Deneyin

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

Taban ** üssünü döndüren 'kuvvet(taban, üs=2)'yi tanımlayın. 'Kare = kuvvet(5)' ve 'küp = kuvvet(5, üs=3)' hesaplayın. `(kare, küp)`ü değerlendirin.

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

dönüş tabanı ** üs

3 denemeden sonra çözüm mevcut

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

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

Değerler Yok olduğunda yeni, boş bir liste kullanan `create_record(isim, değerler=Yok)` tanımını yapın. Değerlere 1 ekleyin ve dict {'name': name, 'values':values} kaydını döndürün. Değerleri aktarmadan iki kez çağırın ve 'a' ve 'b'ye atayın. `(a['değerler'], b['değerler'])`'i değerlendirin.

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

Hiçbiri'ni varsayılan olarak kullanın ve listeyi işlevin içinde oluşturun.

3 denemeden sonra çözüm mevcut

Ek zorluk

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

Biçimlendirilmiş \`"{message}, {name}!"\` dizesini döndüren \`greet(name, message="Merhaba")\` işlevini tanımlayın. Son ifade olarak \`greet("Bob")\` öğesini çağırarak işlevi test edin.

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

Döndürülen selamlama için varsayılan bir mesaj = "Merhaba" parametresi ve bir f dizesi kullanın.

3 denemeden sonra çözüm mevcut