"Hem jeneratörler hem de işlevler için def anahtar sözcüğünü kullanmanın yararları nelerdir?"
Mekanik olarak farklı olmalarına rağmen, pratikte bunları kullandığımda genellikle kavramsal olarak benim için etkili bir şekilde aynıdırlar ( range()
vs çağırmayı pek düşünmüyorum xrange()
).
Bununla birlikte, işlevin ne hakkında hızlı bir şekilde olduğunu anlamak için, bir şeyin kullanımıyla kaybolduğuna katılıyorum def
, ancak işler işlevle başlamak için çok şaşırtılmamalıdır.
Örtük return None
bir koşul bile, bir koşulun uzun süreli koşullardan sonra amaçlanan davranışını karıştırabilir (olduğu return None
gibi, mantıkta son bir davranış veya gözetim olarak düşünülmüştür). Ama bunlar sadece benim inancım.
Argümün özellikle ikna edici olduğunu düşünmüyorum, bu yüzden sadece PEP 255'e erteleyeceğim :
Sorun: Jeneratör işlevlerini jeneratör olmayan işlevlerden ayırmak için "def" yerine başka bir yeni anahtar kelime (örneğin "gen" veya "jeneratör") ekleyin veya sözdizimini başka şekilde değiştirin.
Con: Uygulamada (onlar hakkında nasıl düşündüklerini), jeneratörler ise şunlardır
fonksiyonlar, ancak bükülme ile onlar devam ettirilebilir olduğunu. Nasıl kurulduklarının mekaniği nispeten küçük bir teknik konudur ve yeni bir anahtar kelime getirmek, jeneratörlerin nasıl başladığı (bir jeneratörün hayatının hayati ama küçük bir kısmı) mekaniğini yararsız bir şekilde vurgulayacaktır.
Pro: Gerçekte (onlar hakkında nasıl düşünüyorsunuz), jeneratör fonksiyonları aslında jeneratör gibi yineleyiciler üreten fabrika işlevleridir. Bu açıdan üreteç olmayan işlevlerden radikal olarak farklıdırlar, bir işlevden çok bir yapıcı gibi davranırlar, bu nedenle "def" nin yeniden kullanılması en iyisi kafa karıştırıcıdır. Vücuda gömülü bir "verim" ifadesi, anlambilimin çok farklı olduğuna dair yeterli uyarı değildir.
BDFL: "def" kalır. Her iki tarafta da hiçbir argüman tamamen ikna edici değil, bu yüzden dil tasarımcımın sezgisine danıştım. Bana PEP'de önerilen sözdiziminin tam olarak doğru olduğunu söylüyor - çok sıcak değil, çok soğuk değil. Ancak, Yunan mitolojisinde Delphi'deki Oracle gibi, bana nedenini söylemiyor, bu yüzden PEP sözdizimine karşı argümanlar için bir çürümem yok. Ben gelebilir en iyi (zaten yapılan çürütme ile kabul ... dışında) "FUD" dir. Eğer bu ilk günden itibaren dilin bir parçası olsaydı, Andrew Kuchling'in "Python Warts" sayfasını yapmış olabileceğinden şüpheliyim.