2014-10-12 13 views
25

Python işlevine isteğe bağlı bir argüman için boş parantezleri varsayılan değer olarak koydum ve pylint (Sublime paketi kullanarak) bunun tehlikeli olduğunu söyledi. Birisi bunun neden böyle olduğunu açıklayabilir mi? Bunun yerine, None kullanmak için daha iyi bir alternatif mi?Boş sözlük neden Python'da tehlikeli bir varsayılan değerdir?

+0

varsayılan olarak boş liste pasing sorun argüman, fonksiyonun tüm çağrışımları arasında paylaşılacağıdır - https://docs.python.org/3/tuto'daki "önemli uyarı" konusuna bakın. rial/controlflow.html # default-argument-values ​​ – hamed

cevap

32

Bu işlev yalnızca argümanınızı değiştirirse tehlikelidir. Bir varsayılan argümanı değiştirirseniz, bir sonraki çağrıya kadar devam eder, böylece "boş" deminiz, ilkinden başka aramalarda değerler içermeye başlar.

Evet, None kullanarak bu tür durumlarda hem güvenli hem de gelenekseldir. Bir örneğe

+0

Eğer işlev argümanı değiştirmiyorsa, hala en iyi uygulama adına varsayılan olarak Yok'u kullanmalı mıyız? – NightFurry

+0

@NightFurry: Burada herhangi bir şey yazmayı tereddüt ediyorum - '' Çoğu zaman en iyi seçimdir, ancak belki de zamanın% 100'ü değildir. Kararınızı kullanın, ancak eğer karar veremiyorsanız, “Hiçbiri” güvenli bir bahistir. –

35

inceleyelim:

def f(value, key, hash={}): 
    hash[value] = key 
    return hash 

print f('a', 1) 
print f('b', 2) 

muhtemelen çıkışa bekliyoruz: aslında

{'a': 1} 
{'b': 2} 

Ama verir:

{'a': 1} 
{'a': 1, 'b': 2} 
+0

Teşekkürler adamım! Nedeni anlamıyordum :) – maxadamo

İlgili konular