Bir jeneratör işlevini başlattığınızda, üzerinde next
numaralı çağrıyı çağırana kadar hiçbir kod yürütmez.Python üreteci işlevinin ilk verimden hemen önce ilerlemesi
Bu, jeneratör işlevi bir çeşit başlatma kodu içeriyorsa, yinelenene kadar çalıştırılmayacağı anlamına gelir.
def generator(filename):
with open(filename) as f:
data = f.read()
while True:
yield data
gen = generator('/tmp/some_file')
# at this point, no generator code is executed
# initialization code is executed only at the first iteration
for x in gen:
pass
dosya yoksa, istisna döngü de yükseltilecek:
Bu örneği ele alalım. Jeneratörün yinelenmesinden önce çalıştırılacak ilkyield
'dan önceki kod gibi kodlarını beğenirim, böylece başlatma sırasında tüm özel durumlar jeneratör örneğinde yükseltilecektir.
Bunu yapmanın temiz pythonik bir yolu var mı?
@ TadhgMcDonald-Jensen: Vay, kimse "ayrı başlatma işlevi" çözümünü üç yıl boyunca yayınlamadı. Bu soruya verilen cevap, işe yarıyor, ancak sizi, jeneratörlerinizin sizi kurtarmayı amaçladığı bir devlet makinesi olarak yineleyicinizi yazmanın tüm can sıkıcılarıyla uğraşmaya zorlar. – user2357112
@ user2357112 daha sonra kabul edilen çözümü kullanmazsınız, ancak WGH'nin jeneratörün başlatılmasından sonra bir kodun çalışmasını isteyip istemediğini sorarsınız. –
şahsen, [ilkel fonksiyon çözümünü] (http://stackoverflow.com/a/5725046/5827215) bu soruyu ilk bulduğumda aradığımı buldum. işlev yineleyici ile çağırılmak yerine. –