क्या आप अन्य कार्यात्मक भाषाओं से परिचित हैं? यानी आप यह जानने की कोशिश कर रहे हैं कि पायथन कार्यात्मक प्रोग्रामिंग कैसे करता है, या क्या आप कार्यात्मक प्रोग्रामिंग के बारे में जानने की कोशिश कर रहे हैं और वाहन के रूप में अजगर का उपयोग कर रहे हैं?
इसके अलावा, क्या आप सूची समझ समझ रहे हैं?
map(f, sequence)
के बराबर है (*):
[f(x) for x in sequence]
वास्तव में, मुझे लगता है map()
कि एक बार अजगर 3.0 से निरर्थक होने के कारण हटा दिया गया था (ऐसा नहीं हुआ)।
map(f, sequence1, sequence2)
ज्यादातर इसके बराबर है:
[f(x1, x2) for x1, x2 in zip(sequence1, sequence2)]
(इसमें एक अंतर है कि यह उस मामले को कैसे संभालता है जहां अनुक्रम अलग-अलग लंबाई के होते हैं। जैसा कि आपने देखा, map()
किसी में भी कोई नहीं भरता है जब अनुक्रम में से एक चलता है, जबकि zip()
सबसे कम अनुक्रम बंद हो जाता है)
इसलिए, अपने विशिष्ट प्रश्न को संबोधित करने के लिए, आप परिणाम का प्रयास कर रहे हैं:
foos[0], bars
foos[1], bars
foos[2], bars
# etc.
आप ऐसा एक फ़ंक्शन लिखकर कर सकते हैं जो एकल तर्क लेता है और उसे प्रिंट करता है, उसके बाद बार:
def maptest(x):
print x, bars
map(maptest, foos)
वैकल्पिक रूप से, आप एक सूची बना सकते हैं जो इस तरह दिखती है:
[bars, bars, bars, ] # etc.
और अपने मूल maptest का उपयोग करें:
def maptest(x, y):
print x, y
ऐसा करने का एक तरीका यह होगा कि आप पहले से सूची का निर्माण करें।
barses = [bars] * len(foos)
map(maptest, foos, barses)
वैकल्पिक रूप से, आप itertools
मॉड्यूल में खींच सकते हैं । itertools
अजगर में कार्यात्मक-शैली आलसी-मूल्यांकन प्रोग्रामिंग करने में मदद करने वाले कई चतुर कार्य शामिल हैं। इस मामले में, हम चाहते हैं itertools.repeat
, जो इसके तर्क को अनिश्चित काल के लिए आउटपुट कर देगा क्योंकि आप इस पर पुनरावृति करेंगे। इस अंतिम तथ्य का अर्थ है कि यदि आप करते हैं:
map(maptest, foos, itertools.repeat(bars))
आपको अंतहीन आउटपुट मिलेगा, क्योंकि जब map()
तक कोई एक तर्क अभी भी उत्पादन कर रहा है , तब तक चलता रहेगा । हालाँकि, itertools.imap
जैसा है map()
, लेकिन जैसे ही सबसे छोटा चलना बंद हो जाता है।
itertools.imap(maptest, foos, itertools.repeat(bars))
उम्मीद है की यह मदद करेगा :-)
(*) यह अजगर 3.0 में थोड़ा अलग है। वहां, नक्शा () अनिवार्य रूप से एक जनरेटर अभिव्यक्ति देता है।