SORU
13 AĞUSTOS 2009, PERŞEMBE


Sıfırlanmasını jeneratör Python nesne

Jeneratör nesne birden fazla katsayı ile geri döndüm. Bu jeneratör arama için hazırlık zaman alıcı bir operasyon değil. Jeneratör birkaç kez yeniden kullanmak istiyorum nedeni budur.

y = FunctionWithYield()
for x in y: print(x)
#here must be something to reset 'y'
for x in y: print(x)

Tabii ki, basit bir liste halinde akılda içerik kopyalama alıyorum.

CEVAP
13 AĞUSTOS 2009, PERŞEMBE


Jeneratörler geri olamaz. Aşağıdaki seçenekler vardır:

  1. Yine jeneratör işlevi, nesil yeniden çalıştırın:

    y = FunctionWithYield()
    for x in y: print(x)
    y = FunctionWithYield()
    for x in y: print(x)
    
  2. Tekrar: üzerinde yineleme yapabilirsiniz hangi bellek veya diskte veri yapısı içinde jeneratör sonuçlarını saklayın

    y = list(FunctionWithYield())
    for x in y: print(x)
    # can iterate again:
    for x in y: print(x)
    

Seçenek olumsuz1bu değerleri tekrar. hesaplar olduğunu Eğer CPU-yoğun ise iki kere hesaplanırken. Öte yandan, olumsuz2depolama. Tüm değerlerin listesini hafızada saklanır. Eğer çok fazla değer varsa, bu kullanışsız olabilir.

Klasik varbellek vs işlem bedeli. Ya değerleri saklamak veya onları tekrar hesap etmeden jeneratör sarma bir yol düşünemiyorum.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 30GB

    30GB

    14 AĞUSTOS 2006
  • Kyletiv7

    Kyletiv7

    28 Mayıs 2007
  • Yanko Kral

    Yanko Kral

    8 HAZİRAN 2006