निर्धारित मूल्यांकन तब होता है जब इसकी आवश्यकता होने तक अभिव्यक्ति का मूल्यांकन नहीं किया जाता है। अधिकांश भाषाओं में, आप इस काम को करने के लिए lambda
जैसे कुछ का उपयोग करते हैं। यहाँ एक काल्पनिक उदाहरण है कि अवधारणा के हिस्से से पता चलता है:
def list_files():
for fn in os.listdir('.'):
yield fn, lambda: open(fn, 'r').read()
for fn, body in list_files():
if fn.endswith('.txt'):
print body()
यहाँ, list_files
फ़ाइल नाम का एक समूह और एक "thunk" (कोई तर्क के साथ लैम्ब्डा) जो फ़ाइल की सामग्री रिटर्न देता है। "थंक" एक स्थगित मूल्यांकन है। Thunks का उपयोग करके आप अपनी चिंताओं को अलग करने के लिए अनुमति देता है:
- The Loop पता है कि कैसे फ़ाइलों को पढ़ने की जरूरत नहीं है के लिए है, तो
list_files
list_ftp_files
या list_zip_archive
साथ प्रतिस्थापित किया जा सकता है।
list_files
फ़ंक्शन को यह जानने की आवश्यकता नहीं है कि कौन सी फाइलें पढ़ी जाएंगी। Thunks के साथ, यह हर एक फ़ाइल को पढ़ने की जरूरत नहीं है।
उचित स्थगित मूल्यांकन में, एक बार जब आप "थंक" का मूल्यांकन करते हैं तो यह एक मूल्यांकन प्रति के साथ खुद को बदल देगा, इसलिए इसे दो बार मूल्यांकन करना अब एक बार मूल्यांकन करने से अधिक काम नहीं करेगा। वही चीज़ों को पूरा करने के अन्य तरीके हैं, जैसे कक्षाओं और वस्तुओं के साथ जो मूल्यों को कैश करते हैं।
निर्धारित मूल्यांकन योजना में एक (अपेक्षाकृत) सामान्य मुहावरे है। हास्केल में, मूल्यांकन डिफ़ॉल्ट रूप से स्थगित कर दिए जाते हैं और आपको ऐसा करने के लिए किसी भी वाक्यविन्यास की आवश्यकता नहीं होती है (इसे बंद करने के लिए विशेष वाक्यविन्यास है)।
स्रोत
2010-02-19 05:36:02
मुझे लगता है कि आप अपने दूसरे उदाहरण में भ्रमित प्रकार सिस्टम और आलसी मूल्यांकन कर रहे हैं। "मजबूत" टाइप की गई भाषा साफ चाल करने के लिए आलसी मूल्यांकन का उपयोग कर सकती हैं। जैसे हास्केल के पास बहुत आलसी मूल्यांकन के साथ एक बहुत मजबूत स्थिर प्रकार प्रणाली है! पायथन के विपरीत, 'if-then-else' को टाइप-चेक करना होगा, लेकिन इसके अलावा मूल्यांकन स्थगित कर दिया गया है। उदाहरण के लिए, आप लिख सकते हैं 'यदि सही है तो 5 और अपरिभाषित', और यह संकलित करता है और ठीक चलता है (और परिणाम 5 अपेक्षित है)। कि आपका 'if-else' पायथन में काम करता है भले ही यह स्थिर भाषा में टाइप-चेक न करे, मूल्यांकन रणनीति से संबंधित नहीं है। –