পাইথনের জেনারেটর ফাংশন থেকে কীভাবে একবারে একটি মান পাবেন?


113

খুব বেসিক প্রশ্ন - পাইথনের জেনারেটরের কাছ থেকে কীভাবে একটি মান পাওয়া যায়?

এখনও অবধি খুঁজে পেয়েছি লেখার মাধ্যমে একটি পেতে পারি gen.next()। আমি ঠিক এটি সঠিক উপায় নিশ্চিত করতে চাই?

উত্তর:


154

হ্যাঁ, বা next(gen)2.6+ এ।


3
আমি জানি এটি বিব্রতকর কারণ কেন এই কাজ করে না? W1 = params.next()তবে একটি ত্রুটি পানAttributeError: 'generator' object has no attribute 'next'
চার্লি পার্কার


2
@ চার্লিপার্কার আপনি অবশ্যই পাইথন 3 ব্যবহার করছেন!
অক্ষয় লোকুর

66

পাইথন <= 2.5 তে, ব্যবহার করুন gen.next()। এটি পাইথন ২.x সংস্করণের জন্য কাজ করবে তবে পাইথন ৩.০ নয়

পাইথন> = 2.6 এ, ব্যবহার করুন next(gen)। এটি একটি অন্তর্নির্মিত ফাংশন, এবং আরও পরিষ্কার। এটি পাইথন 3 তেও কাজ করবে।

এই উভয়ই একটি বিশেষভাবে নামযুক্ত ফাংশন কল করে next(), যা সাবক্ল্যাসিং করে ওভাররাইড করা যায়। পাইথন 3-তে, __next__()অন্য বিশেষ ক্রিয়াকলাপগুলির সাথে সামঞ্জস্যপূর্ণ হওয়ার জন্য , এই ফাংশনটির নতুন নামকরণ করা হয়েছে ।


16

ব্যবহার (অজগর 3 জন্য)

next(generator)

এখানে একটি উদাহরণ

def fun(x):
    n = 0
    while n < x:
        yield n
        n += 1
z = fun(10)
next(z)
next(z)

মুদ্রণ করা উচিত

0
1


2

পাইথন 3 এবং উপরে ব্যবহারে জেনারেটরের বস্তুর সঙ্গে যুক্ত মান পেতে next(<your generator object>)। পরবর্তী () পরবর্তী কলগুলি সারিতে ক্রমাগত অবজেক্টের মান উত্পাদন করে।


1

পাইথন 3 এ আপনার নেই gen.next(), তবে আপনি এখনও ব্যবহার করতে পারেন next(gen)। আপনি যদি আমাকে জিজ্ঞাসা করেন তবে কিছুটা উদ্ভট তবে এটি এমনই।


1
এটা তেমন বিস্ময়কর নয়। পাইথন 3 এ জিনিসগুলি ভাঙ্গার এবং কেবল আরও পরিষ্কার কোডের অনুমতি দেওয়ার কথা রয়েছে। পিছনে সামঞ্জস্য না থাকা কিছু ব্রেকিং পরিবর্তনের বিন্দু।
তাতারাইজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.