আপনি return
একবার জেনারেটরে ব্যবহার করতে পারেন ; এটি কোনও ফলন না করে পুনরাবৃত্তি থামিয়ে দেয় এবং এইভাবে ফাংশনটি সুযোগের বাইরে চলে যাওয়ার জন্য একটি সুস্পষ্ট বিকল্প সরবরাহ করে। সুতরাং yield
ফাংশনটিকে একটি জেনারেটরে রূপান্তর করতে ব্যবহার করুন , তবে return
কিছু উত্পাদন করার আগে জেনারেটরটি শেষ করার আগে এটি তৈরি করুন।
>>> def f():
... return
... yield
...
>>> list(f())
[]
আমি নিশ্চিত নই যে আপনার কাছে যা আছে তার চেয়ে এটি অনেক ভাল it এটি কেবলমাত্র কোনও অনি-স্টেট if
বিবৃতিকে কোনও অপ- বিবৃতি দিয়ে প্রতিস্থাপন করবে yield
। তবে এটি আরও মূর্তিমান। মনে রাখবেন যে কেবল ব্যবহার করা কার্যকর yield
হয় না।
>>> def f():
... yield
...
>>> list(f())
[None]
শুধু ব্যবহার iter(())
করবেন না কেন ?
এই প্রশ্নটি একটি খালি জেনারেটর ফাংশন সম্পর্কে বিশেষত জিজ্ঞাসা করে । সেই কারণে, আমি পাইথনের বাক্য গঠনটির অভ্যন্তরীণ সামঞ্জস্যতা সম্পর্কে একটি প্রশ্ন হিসাবে বিবেচনা করি, সাধারণভাবে খালি পুনরাবৃত্তি তৈরির সর্বোত্তম উপায় সম্পর্কে প্রশ্ন না করে।
যদি প্রশ্নটি খালি পুনরুক্তি তৈরির সর্বোত্তম উপায় সম্পর্কে হয় তবে আপনি তার পরিবর্তে ব্যবহার সম্পর্কে জেকটবামোর সাথে একমত হতে পারেন iter(())
। তবে এটি পর্যবেক্ষণ করা জরুরী যে এটি iter(())
কোনও ফাংশন দেয় না! এটি সরাসরি একটি খালি পুনরাবৃত্তিযোগ্য ফেরত দেয়। ধরুন আপনি একটি API করে একটি callable আশা সঙ্গেও কাজ করছি যে আয় একটি iterable প্রতিবার এটি বলা হচ্ছে, শুধু একটি সাধারণ উত্পাদক ফাংশন মত। আপনাকে এরকম কিছু করতে হবে:
def empty():
return iter(())
( এই উত্তরের প্রথম সঠিক সংস্করণ দেওয়ার জন্য ক্রেডিট উনটবুতে যাওয়া উচিত ))
এখন, আপনি উপরের পরিষ্কারটি পেতে পারেন, তবে আমি এমন পরিস্থিতিগুলি কল্পনা করতে পারি যেখানে এটি কম পরিষ্কার হবে। জেনারেটর ফাংশন সংজ্ঞাগুলির একটি দীর্ঘ তালিকার এই উদাহরণটি বিবেচনা করুন:
def zeros():
while True:
yield 0
def ones():
while True:
yield 1
...
দীর্ঘ তালিকাটির শেষে, আমি এর yield
মধ্যে কিছু দিয়ে বরং দেখতে পাচ্ছি :
def empty():
return
yield
বা, পাইথন ৩.৩ এবং এর উপরে ( ডিএসএম দ্বারা প্রস্তাবিত হিসাবে ), এটি:
def empty():
yield from ()
yield
কীওয়ার্ডের উপস্থিতি সংক্ষিপ্ত নজরে এটিকে স্পষ্ট করে তোলে যে অন্যদের মতো ঠিক এটিই অন্য একটি জেনারেটর ফাংশন। iter(())
সংস্করণটি একই কাজ করছে তা দেখতে আরও কিছুটা সময় লাগে ।
এটি একটি সূক্ষ্ম পার্থক্য, তবে আমি সত্যই বলেছি yield
ভিত্তিক কার্যগুলি আরও পঠনযোগ্য এবং বজায় রাখা যায়।
ব্যবহারকারীর 3840170 থেকে এই দুর্দান্ত উত্তরটিও দেখুন যা dis
এই পদ্ধতির পক্ষে আরও বেশি যুক্তিযুক্ত কারণটি দেখানোর জন্য ব্যবহার করে: সংকলিত হওয়ার পরে এটি কয়েকটি সংক্ষিপ্ত নির্দেশনা নির্গত করে।
if False: yield
তবে এখনও এই ধরণটি জানেন না এমন লোকদের জন্য বিভ্রান্তিকর