„Jakie są zalety używania słowa kluczowego def zarówno dla generatorów, jak i funkcji?”
Chociaż są one mechanicznie różne, w praktyce, kiedy ich używam, często są dla mnie efektywnie takie same koncepcyjnie (nie myślę dużo o sprawdzaniu range()
vs xrange()
).
Jeśli chodzi o zrozumienie, o co chodzi w tej funkcji szybko, zgadzam się, że coś zostało utracone przy użyciu def
, ale rzeczy nie powinny być zbyt zaciemnione w funkcji na początku.
Nawet domniemane return None
może mylić zamierzone zachowanie funkcji po długim okresie warunkowym (jak w, było return None
zamierzone jako zachowanie ostateczne lub niedopatrzenie w logice). Ale to tylko moje przekonania.
Nie wydaje mi się jednak, aby mój argument był szczególnie przekonujący, dlatego odłożę się na PEP 255 :
Problem: Wprowadź inne nowe słowo kluczowe (powiedzmy „gen” lub „generator”) zamiast „def” lub w inny sposób zmień składnię, aby odróżnić funkcje generatora od funkcji innych niż generator.
Przeciw: W praktyce (jak o nich myślisz) generatory są
funkcjami, ale z tym, że można je wznowić. Mechanika ich konfiguracji jest stosunkowo niewielkim problemem technicznym, a wprowadzenie nowego słowa kluczowego zbytnio podkreśliłoby mechanikę uruchamiania generatorów (istotna, ale niewielka część życia generatora).
Pro: W rzeczywistości (jak o nich myślisz), funkcje generatora są tak naprawdę funkcjami fabrycznymi, które wytwarzają iteratory generatora jak za pomocą magii. Pod tym względem radykalnie różnią się od funkcji innych niż generatory, zachowując się bardziej jak konstruktor niż funkcja, więc ponowne użycie „def” jest w najlepszym razie mylące. Wyrażenie „dochodowości” zakopane w ciele nie jest wystarczającym ostrzeżeniem, że semantyka jest tak inna.
BDFL: „def” pozostaje. Żaden argument po obu stronach nie jest całkowicie przekonujący, więc skonsultowałem się z intuicją mojego projektanta języka. Mówi mi, że składnia zaproponowana w PEP jest dokładnie właściwa - nie za gorąca, nie za zimna. Ale, podobnie jak Wyrocznia w Delfach w mitologii greckiej, nie mówi mi dlaczego, więc nie mam obalenia argumentów przeciwko składni PEP. Najlepsze, co mogę wymyślić (poza zgodzeniem się z obaleniami ... już zrobionymi) to „FUD”. Gdyby była to część języka od pierwszego dnia, bardzo wątpię, czy stworzyłaby stronę „Python Warts” Andrew Kuchlinga.