Python işlevlerinde varsayılan argümanlar nasıl kullanılır ve not edilir

Python işlev tanımında varsayılan bir bağımsız değişken ayarlamak, bir işlev çağrısı sırasında bağımsız değişken atlanırsa varsayılan değerin kullanılmasına neden olur.

Aşağıdaki ayrıntılar aşağıda açıklanmıştır.

  • Varsayılan Bağımsız Değişkenleri Ayarlama
  • Varsayılan argümanların konumu üzerindeki kısıtlamalar
  • Varsayılan değer olarak bir liste veya sözlük kullanıldığında

Varsayılan Bağımsız Değişkenleri Ayarlama

İşlev tanımında argüman adı = varsayılan değer ise, karşılık gelen argüman atlandığında varsayılan değer kullanılacaktır.

def func_default(arg1, arg2='default_x', arg3='default_y'):
    print(arg1)
    print(arg2)
    print(arg3)

func_default('a')
# a
# default_x
# default_y

func_default('a', 'b')
# a
# b
# default_y

func_default('a', arg3='c')
# a
# default_x
# c

Varsayılan argümanların konumu üzerindeki kısıtlamalar

Bir işlev tanımlarken normal bir bağımsız değişkenin (kendisi için varsayılan bir değerin belirtilmediği bir bağımsız değişken) önüne varsayılan bir bağımsız değişken yerleştirmek bir hatayla sonuçlanır.
SyntaxError

# def func_default_error(arg2='default_a', arg3='default_b', arg1):
#     print(arg1)
#     print(arg2)

# SyntaxError: non-default argument follows default argument

Varsayılan değer olarak bir liste veya sözlük kullanıldığında

Varsayılan değer olarak liste veya sözlük gibi güncellenebilir (değişebilir) bir nesne belirtilirse, işlev tanımlandığında o nesne oluşturulur. Ardından, işlev karşılık gelen argüman olmadan çağrıldığında aynı nesne kullanılır.

Varsayılan argüman değerleri, fonksiyon tanımı yürütüldüğünde soldan sağa doğru değerlendirilir. Bu, varsayılan bağımsız değişken ifadesinin, işlev tanımlandığında yalnızca bir kez değerlendirildiği ve her çağrı için aynı “hesaplanan” değerin kullanıldığı anlamına gelir.
8.7. Function definitions — Python 3.10.2 Documentation

Bu nedenle, örneğin, varsayılan argümanı olarak bir liste veya sözlük alan ve ona öğeler ekleyen ve bu argüman olmadan birden çok kez çağrılan bir işlev tanımlanırsa, öğeler aynı nesneye tekrar tekrar eklenecektir.

Listeleme örneği.

def func_default_list(l=[0, 1, 2], v=3):
    l.append(v)
    print(l)

func_default_list([0, 0, 0], 100)
# [0, 0, 0, 100]

func_default_list()
# [0, 1, 2, 3]

func_default_list()
# [0, 1, 2, 3, 3]

func_default_list()
# [0, 1, 2, 3, 3, 3]

Sözlük için örnek.

def func_default_dict(d={'default': 0}, k='new', v=100):
    d[k] = v
    print(d)

func_default_dict()
# {'default': 0, 'new': 100}

func_default_dict(k='new2', v=200)
# {'default': 0, 'new': 100, 'new2': 200}

Fonksiyon her çağrıldığında yeni bir nesne oluşturulur.

def func_default_list_none(l=None, v=3):
    if l is None:
        l = [0, 1, 2]
    l.append(v)
    print(l)

func_default_list_none()
# [0, 1, 2, 3]

func_default_list_none()
# [0, 1, 2, 3]
Copied title and URL