def a(b=[]):
b.append(1)
return b
print a()
print a()
Birdenbire 2 elem ile bir listeye sahibim, ama nasıl? Her seferinde boş listeye ayarlanmamalı. fonksiyon tanımlandığında yardımpython'daki kapanış sorusunu anlamıyor
def a(b=[]):
b.append(1)
return b
print a()
print a()
Birdenbire 2 elem ile bir listeye sahibim, ama nasıl? Her seferinde boş listeye ayarlanmamalı. fonksiyon tanımlandığında yardımpython'daki kapanış sorusunu anlamıyor
En azından genel anlamda değil, kapaklarla ilgili bir şey yoktur.
b
için varsayılan değer "yeni bir boş liste" değildir; “fonksiyonu tanımlarken yeni oluşturduğum bu özel nesne, boş bir liste haline getiriliyor”. Fonksiyon her argüman olmadan çağrıldığında, aynı nesne kullanılır.
Standart argümanlar için
Teşekkür sadece bir kez değerlendirilir. Aynı nesneyi bir çağrısından diğerine kadar korur, yani aynı liste eklemeye devam eder. Varsayılan olarak None
değerini kullanın ve bunun üstesinden gelmek istiyorsanız bunun yerine bakın.
düzeltilmiş versiyon, diğer yanıtlar verilen nedenlerden dolayı: function tanımlanır zaman
def a(b=None):
b = [] if b is None else b
b.append(1)
return b
varsayılan argümanlar değerlendirilir (bir kez) değil, her zaman denir.
bu deneyin:
def a(b=None):
if b is None
b = []
b.append(1)
return b
print a()
print a()
Ayrıca bkz http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument –