उदाहरण के रूप में नीचे का उपयोग करके, हम देख सकते हैं कि x.giveMyNum() को 4 गुना - 3 बार कहा जाएगा, ताकि मेरे नंबर के मूल्य की जांच हो और एक बार सूची को वापस करने के लिए बनाया जा सके। आप शायद इसे केवल 3 बार बुलाएंगे, क्योंकि यह एक शुद्ध कार्य है और इसका मूल्य नहीं बदलेगा।सूची समझ में एकाधिक कॉल को रोकना
सूची बूझ संस्करण:
class test(object):
def __init__(self,myNum):
self.myNum=myNum
def giveMyNum(self):
print "giving"
return self.myNum
q=[test(x) for x in range(3)]
print [x.giveMyNum() for x in q if x.giveMyNum()>1]
मैं जानता हूँ कि आप इस तरह से कुछ कर सकते हैं इसे ठीक करने के:
ret=[]
for x in q:
k=x.giveMyNum()
if k>1:
ret.append(k)
लेकिन वहाँ एक सूची समझ में अतिरिक्त कॉल को रोकने के लिए एक रास्ता है?
मुझे मध्यवर्ती मूल्य रखने की आवश्यकता नहीं है।
मुझे कार्यात्मक कोड पसंद है। यह बहुत पठनीय है। – Carbon
@ProbablyAStupidQuestion, तो आपको 'फ़िल्टर (लैम्ब्डा एन: एन> 1, मानचित्र (test.giveMyNum, q)) हो सकता है)); –
यह वास्तव में अच्छा है! मुझे दुखद फिल्टर Python3 में itertools में स्थानांतरित किया जा रहा है। – Carbon