• 0

ما هو بديل generator.next() في بايثون 3؟

لدي مولد يولد تسلسل معين كما في المثال التالي:

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

في بايثون 2.6 أستطيع القيام بهذه الاستدعاءات:

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

لكن في الإصدار 3 من بايثون أحصل على الخطأ التالي إذا حاولت تشغيل السطر السابق:

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

فما بديل هذا الأمر في بايثون 3؟

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

حدثت في الإصدار 3 من بايثون العديد من التغييرات والتي جعلت من بايثون أكثر منطقية من الناحية البرمجية، ومن بين هذه التغييرات تم تغيير اسم تابع g.next() إلى g.__next__() كي يتطابق مع بقية التوابع الخاصة مثل __init__() و __del__ والتي تمتلك جميعها خطوط سفلية وكانت next() هي الاستثناء الوحيد لهذه القاعدة وتم إصلاح ذلك في الإصدار 3 من بايثون.

وكنصيحة، استخدم في الإصدار 3 من بايثون next(g) بدلا من g.__next__()

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن