कई बार मैंने सोचा है कि जनरेटर शैली और अधिक प्रत्यक्ष हो सकता है कि एक सूची लौट रहा, उदाहरण के लिए,क्या पाइथन में कोई लाइब्रेरी फ़ंक्शन है जो जनरेटर-फ़ंक्शन को किसी फ़ंक्शन को वापस करने के लिए चालू करता है?
def foo(input_array):
for x in input_array:
yield processed(x)
बनाम
def bar(input_array):
accumulator = []
for x in input_array:
accumulator.append(processed(x))
return accumulator
(ठीक है, अगर सचमुच यह इतना आसान थे , मैं map
लिखूंगा, लेकिन आपको बिंदु मिल जाएगा: जेनरेटर संस्करण क्लीनर है)। हालांकि, जनरेटर का रिटर्न प्रकार हमेशा वांछित नहीं होता है। क्या कोई अंतर्निर्मित सजावट है जिसे मैं foo
को किसी सूची या टुपल को वापस करने वाले फ़ंक्शन में बदलने के लिए उपयोग कर सकता हूं? जिस तरह से मैं लिखते हैं अपने आप को है,
import functools
def transform_return_value(transformer):
def inner(f):
@functools.wraps(f)
def new_f(*argv, **kwargs):
return transformer(f(*argv, **kwargs))
return new_f
return inner
@transform_return_value(list)
def foo(input_array):
for x in input_array:
yield processed(x)
रुको ... आप एक जनरेटर फ़ंक्शन लिखना चाहते हैं जो एक सूची देता है? मुझे यकीन नहीं है कि मैं इसे समझता हूं। क्यों न केवल 'सूची (जनरेटर_फंक्शन()) लिखें, या' list_function() 'लिखने के लिए क्यों लिखें? – mgilson
एक और विकल्प सूची समझ का उपयोग करना है: '[input_array में x के लिए संसाधित (x)]'। दोनों से तर्कसंगत रूप से क्लीनर ... –
@mgilson सही है: आमतौर पर जब आप किसी सूची की आवश्यकता होती है तो आप सूची में कनवर्ट करेंगे, जो हमेशा क्लाइंट कोड में है। मैं फ़ंक्शन को पुनरावर्तित करने के रूप में दस्तावेज़ों को दस्तावेज करता हूं और 'to_sequence (x)' फ़ंक्शन को प्रभावी रूप से करता हूं जो 'सूची (x) को प्रभावी रूप से करता है (x, अनुक्रम) अन्य x'। –