Pertimbangkan yang berikut ini:
def some_function():
return 1
def some_generator():
yield 1
Dalam kode di atas, some_function
adalah fungsi, sedangkan some_generator
generator. Mereka terlihat sangat mirip.
Masalah yang saya miliki ketika membaca kode adalah bahwa saya perlu memindai setiap baris dalam "fungsi" mencari yield
kata kunci sebelum saya dapat menentukan apakah itu sebenarnya sebuah fungsi atau generator!
Sepertinya bagi saya bahwa menggunakan kata kunci yang berbeda untuk generator akan lebih masuk akal, misalnya:
gen some_generator():
yield 1
Apa manfaat menggunakan def
kata kunci untuk generator dan fungsi? Mengapa kata kunci baru tidak diperkenalkan ke fungsi dan generator yang terpisah?
design
programming-languages
python
Derek Kwok
sumber
sumber
gen
bukannyadef
tidak akan membuat transformasi itu secara signifikan lebih berat.Jawaban:
"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()
vsxrange()
).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, adalahreturn 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 :
sumber
await
(danasync with
danasync for
) yang ditambahkan dalam PEP 492 , yang bekerja sangat mirip dengan ituyield from
, membutuhkan fungsi yang digunakan untuk dideklarasikan menggunakanasync def
bukan sebagai adildef
.Menambahkan kata kunci baru berisiko melanggar program yang ada. Perancang bahasa umumnya mencoba menghindari menambahkan kata kunci baru, terutama untuk fitur bahasa yang ditambahkan setelah bahasa tersebut telah mendapatkan popularitas. Setiap kata kunci yang mereka tambahkan adalah pengidentifikasi bahwa program tidak boleh digunakan untuk tujuan lain, jadi menambahkan kata kunci berpotensi merusak program yang ada. Desainer bahasa harus mempertimbangkan manfaat kata kunci baru terhadap biaya.
Saya ragu bahwa mendefinisikan kata kunci terpisah untuk generator akan memiliki banyak manfaat. Untuk memahami apakah simbol sesuai dengan nama fungsi atau nama generator adalah sesuatu yang penting bagi penelepon, dan penelepon tidak harus (dan terkadang tidak dapat) melihat kata kunci apa yang digunakan untuk mengimplementasikannya. Itulah tanggung jawab konvensi dan dokumentasi penamaan yang lebih baik.
sumber
Generator adalah fungsi yang mengevaluasi malas. Mengingat bahwa mereka adalah hal yang sama pada dasarnya, masuk akal bahwa mereka akan menggunakan kata kunci yang sama. Salah satu opsi mungkin menggunakan komentar untuk mengidentifikasi mana yang untuk contoh tertentu:
sumber
Saya kira itu karena lebih Pythonic tapi apa yang saya tahu? ;)
Saya tidak berpikir itu penting. Lebih mudah untuk mengingat bagi saya karena tidak perlu menghafal keduanya.
EDIT: PEP mungkin berkata, Anda bisa menyelidiki di sana.
sumber