পাইথন 3 তে কোনও ফলন জেনারেটরে আর কোনও () কাজ নেই


84

ইন এই প্রশ্নের আমি পাইথন জেনারেটর ব্যবহার করে একটি অবিরাম ক্রম আছে। পাইথন 3 তে একই কোডটি কাজ করে না বলে মনে হয় কোনও next()ফাংশন নেই। nextফাংশনের সমতুল্য কী ?

def updown(n):
    while True:
        for i in range(n):
            yield i
        for i in range(n - 2, 0, -1):
            yield i

uptofive = updown(6)
for i in range(20):
    print(uptofive.next())


এই কোডটি কীভাবে কাজ করে? আমি পেয়েছি এটি কাজ করে তবে আমি যা পড়েছি তা থেকে, "একটি ফলনের বিবৃতি পৌঁছে যাওয়ার পরে কোডটি কার্যকর করা বন্ধ হয়ে যায়"। ( পাইথন-কোর্স.ইইউ / পাইপথন ৩_জেনারেটর.পিএফপি )। সুতরাং প্রথমটিতে for i in range(n), কেন yieldকেবল "1" ফিরে আসে না ? পরিবর্তে, ব্যাপ্তির প্রথম মানের পরে, কোডটি অবিরত থাকে এবং পুরো পরিসর দেয়, যা আমার কাছে মনে হয় যে ফলনটি একবারে একাধিকবার বলা হয়। উপদ্রবটি বুঝতে আমার একটু সমস্যা হচ্ছে।
মাইক এস

প্রথমবার forকলগুলি যখন আপনার ফাংশন থেকে জেনারেটর অবজেক্ট তৈরি হয়েছিল, এটি শুরু থেকে আপনার ফাংশনটিতে কোডটি চালাবে যতক্ষণ না এটি আঘাত করে yield, তখন এটি লুপের প্রথম মানটি ফিরিয়ে দেবে return তারপরে, একে অপরের কলটি আপনি ফাংশনে আরও একবার লিখেছেন সেই লুপটি চালাবে এবং ফেরতের কোনও মূল্য না পাওয়া পর্যন্ত পরবর্তী মানটি ফিরিয়ে দেবে। ( এই টিউটোরিয়াল থেকে নেওয়া )
মতিয়া পাত্তরনা

উত্তর:



44

পাইথন 3 এ বাক্য গঠন আরও সুসংগত করার জন্য, next()পদ্ধতির নামকরণ করা হয়েছিল __next__()। আপনি এটি ব্যবহার করতে পারেন। এটি পিইপি 3114 এ ব্যাখ্যা করা হয়েছে ।

গ্রেগের সমাধান অনুসরণ এবং বিল্টিন next()ফাংশন (যা তারপরে কোনও বস্তুর __next__()পদ্ধতি সন্ধান করার চেষ্টা করে ) কল করার পরামর্শ দেওয়া হয়।


4
বিশেষত যেহেতু ফাংশনটি 2 এবং 3 সংস্করণগুলির মধ্যে পোর্টেবল হয়, যখন পদ্ধতিগুলি (নাম পরিবর্তনের কারণে) হয় না।
হোল্ডেনওয়েব
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.