"Apa manfaat menggunakan kata kunci def untuk generator dan fungsi?"
Meskipun mereka secara mekanis berbeda, dalam praktiknya ketika saya menggunakannya mereka sering secara efektif sama dengan saya secara konseptual (saya tidak berpikir banyak tentang memanggil range()
vs xrange()
).
Dalam hal memahami apa fungsi semua tentang dengan cepat, saya setuju ada sesuatu yang hilang dengan penggunaan def
, tetapi hal-hal tidak boleh terlalu dikaburkan dalam fungsi untuk memulai.
Bahkan implisit return None
dapat membingungkan perilaku yang dimaksudkan dari suatu fungsi setelah sedikit kondisional (seperti pada, adalah return None
dimaksudkan sebagai perilaku akhir atau kekeliruan dalam logika). Tapi itu hanya kepercayaan saya tentang hal itu.
Saya tidak merasa argumen saya sangat meyakinkan, jadi saya hanya akan menunda PEP 255 :
Masalah: Perkenalkan kata kunci baru lainnya (misalnya, "gen" atau "generator") sebagai ganti "def", atau ubah sintaksnya, untuk membedakan fungsi generator dari fungsi non-generator.
Con: Dalam praktik (bagaimana Anda berpikir tentang mereka), generator adalah
fungsi, tetapi dengan twist yang mereka dapat dilanjutkan. Mekanika bagaimana mereka diatur adalah masalah teknis yang relatif kecil, dan memperkenalkan kata kunci baru tidak akan terlalu menekankan mekanika bagaimana generator memulai (bagian penting tapi kecil dari kehidupan generator).
Pro: Pada kenyataannya (bagaimana Anda berpikir tentang mereka), fungsi generator sebenarnya adalah fungsi pabrik yang menghasilkan generator-iterator seolah-olah dengan sihir. Dalam hal ini mereka sangat berbeda dari fungsi non-generator, bertindak lebih seperti konstruktor daripada fungsi, sehingga menggunakan kembali "def" paling membingungkan. Pernyataan "hasil" yang terkubur dalam tubuh tidak cukup memperingatkan bahwa semantiknya sangat berbeda.
BDFL: "def" itu tetap. Tidak ada argumen di kedua sisi yang benar-benar meyakinkan, jadi saya telah berkonsultasi dengan intuisi perancang bahasa saya. Ini memberitahu saya bahwa sintaks yang diusulkan dalam PEP tepat - tidak terlalu panas, tidak terlalu dingin. Tapi, seperti Oracle di Delphi dalam mitologi Yunani, itu tidak memberi tahu saya alasannya, jadi saya tidak memiliki bantahan untuk argumen terhadap sintaksis PEP. Yang terbaik yang bisa saya hasilkan (selain menyetujui bantahan ... sudah dibuat) adalah "FUD". Jika ini telah menjadi bagian dari bahasa sejak hari pertama, saya sangat meragukan itu akan membuat halaman "Python Warts" Andrew Kuchling.