SORU
2 Temmuz 2009, PERŞEMBE


Jeneratör.() bir sonraki python 3.0 görünür?

Örneğin: bir dizi üreten bir jeneratör var

def triangleNums():
    '''generate series of triangle numbers'''
    tn = 0
    counter = 1
    while(True):
        tn = tn   counter
        yield tn
        counter = counter   1

python 2.6 aşağıdaki görüşme yapmak mümkün duyuyorum:

g = triangleNums() # get the generator
g.next()           # get next val

eğer aynı kod iki satır idam ederim ancak 3.0 aşağıdaki hatayı alıyorum:

AttributeError: 'generator' object has no attribute 'next'

ama döngü yineleyici sözdizimi 3.0 çalışır

for n in triangleNums():
    if not exitCond:
       doSomething...

3.0 için bu fark davranış açıklayan henüz bir şey bulabilmiş değilim.

CEVAP
2 Temmuz 2009, PERŞEMBE


Doğru, g.next() g.__next__() olarak değiştirildi. Bunun nedeni kıvamı var. __init__() __del__ gibi özel yöntemler alt çizgi (ya da onları aramak popüler olmaya başladı"), ve . "dunder çift tüm() gelecek bu kuralın birkaç istisna dışında biri. Python 3.0 giderir. [*]

Ama Paolo dediği gibi g.__next__(), çağırmak yerine, next(g) kullanın.

[*] Bu düzeltme, fonksiyon öznitelikleri gibi almış daha özel nitelikleri vardır. Artık func_name Artık __name__, vb.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • fufko

    fufko

    27 ŞUBAT 2006
  • MisterBrightside

    MisterBright

    24 Mart 2006
  • Techmoan

    Techmoan

    31 Mayıs 2009