Aşağıdaki iki seçenek arasından, yinelenen ve daha fazla mantık eklemek için daha çekici (okunabilir kod, daha pythonic, verimlilik vb.) Nedir ve gelecekte daha fazla mantık eklemek istiyorum Her dönüş değeri 1)?Dönüş jeneratörü Geri Dönme Yok
Seçeneklerden biri, jeneratörü döndürür, diğeri, tüm yinelemeler tamamlandığında bir sonraki öğeyi ve None
değerini döndürür.
Tercih edilen bir yöntem var mı? Evet ise neden? Bazı yöntemlerde sınırlama var mı, başka bir şey yok.
class Option1():
def __init__(self):
self.current = 0
def get_next_batch(self, my_list):
if self.current == len(my_list):
self.current = 0
return None
self.current += 1
return [my_list[self.current-1]]
class Option2():
def __init__(self):
self.current = 0
def get_next_batch(self, my_list):
while self.current < len(my_list):
yield [my_list[self.current]]
self.current += 1
self.current = 0
raise StopIteration()
Kullanımı: Her iki durumda da
o1 = Option1()
o2 = Option2()
arr = [1,2,3,4,5]
a = o1.get_next_batch(arr)
while a is not None:
print a
a = o1.get_next_batch(arr)
for item in o2.get_next_batch(arr):
print item
Çıktı: Neredeyse kesinlikle ikinci ile gitmek istiyorum
[1]
[2]
[3]
[4]
[5]
Jeneratör hakkında açıklamalar için teşekkürler. Akıma ihtiyacım var çünkü mantık daha karmaşık olduğunda farklı boyutlarda listeler getiriyorum. Bazı opsiyonların 'Option1' kullanılarak ve 'Option2' kullanılmadan gerçekleştirilebildiği bir senaryo var mı? Örneğin geri döndüğüm bir sonraki öğe, halihazırda iade ettiğim öğelere veya buna benzer bir şeye ne zaman bağlıdır? – Farseer
Hayır, her ikisi de aynı şeyleri başarabilir. Jeneratörler kullanarak yineleyicileri modellemek sadece kavramsal olarak daha kolay (bence). – Dunes
Option1'in bir for döngüsünde nasıl çalıştığı hakkında biraz bilgi eklendi. – Dunes