اذهب إلى المحتوى

السؤال

نشر

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

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؟

Recommended Posts

  • 0
نشر

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

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

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...