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?
cevap
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
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
@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. –
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}
Teşekkürler adamım! Nedeni anlamıyordum :) – maxadamo
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