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


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.