ए purefunction एक गणितीय फ़ंक्शन के समान कार्य है, जहां "असली दुनिया" और साइड इफेक्ट्स के साथ कोई बातचीत नहीं है। देखने के एक और अधिक व्यावहारिक दृष्टिकोण से, इसका मतलब है कि एक शुद्ध समारोह नहीं कर सकते हैं:पायथन में कोई फ़ंक्शन शुद्ध है या नहीं, यह जांचने के लिए कैसे करें?
- प्रिंट या अन्यथा संदेश
- यादृच्छिक बनें
- बदलें वैश्विक चर प्रणाली समय पर निर्भर दिखाने
- और अन्य
ये सभी सीमाएं शुद्ध कार्य के बारे में कारण बनाना आसान बनाती हैं गैर शुद्ध लोगों की तुलना में। अधिकांश कार्यों को तब शुद्ध होना चाहिए ताकि कार्यक्रम में कम कीड़े हो सकें।
हास्केल जैसे विशाल प्रकार के सिस्टम वाली भाषाओं में पाठक प्रारंभ से पढ़ सकता है अगर कोई फ़ंक्शन है या शुद्ध नहीं है, जिससे लगातार पढ़ने को आसान बना दिया जाता है।
पायथन में यह जानकारी फ़ंक्शन के शीर्ष पर रखे गए @pure
सजावट द्वारा अनुकरण की जा सकती है। मैं उस सजावटी को वास्तव में कुछ सत्यापन कार्य करने के लिए भी पसंद करूंगा। मेरी समस्या ऐसे सजावट के कार्यान्वयन में निहित है।
अभी मैं बस ऐसे global
या random
या print
के रूप में कदम उठाए जाने लगे के लिए समारोह के स्रोत कोड देख सकते हैं और अगर यह उनमें से एक पाता है शिकायत।
import inspect
def pure(function):
source = inspect.getsource(function)
for non_pure_indicator in ('random', 'time', 'input', 'print', 'global'):
if non_pure_indicator in source:
raise ValueError("The function {} is not pure as it uses `{}`".format(
function.__name__, non_pure_indicator))
return function
हालांकि यह एक अजीब हैक की तरह लगता है, कि या अपनी किस्मत पर निर्भर करता है काम नहीं हो सकता है, आप कृपया मुझे एक बेहतर डेकोरेटर लिखित रूप में मदद कर सकता है?
आप 'test.ourcese' का निरीक्षण कर सकते हैं, फिर 'ast.parse' और नोड्स को विभिन्न चीजों की जांच कर सकते हैं ... लेकिन आप भाषा के अस्तित्व के कारण जा रहे हैं - यदि आप चाहें तो' abc' मॉड्यूल का उपयोग करके देखें सामान, फिर 'isinstance' जांच जहां आवश्यकता हो ... - पायथन ** दृढ़ता से ** टाइप किया गया है - नहीं ** स्थिर रूप से ** टाइप –
@ जोनक्लेमेंट्स गतिशील भाषाएं वास्तव में कम संकलन-समय सत्यापन करती हैं, लेकिन मुझे लगता है कि यह है विशेष जांच कार्यक्रम संगठन को काफी बढ़ाएगी और प्रोग्रामर को अपने काम की समझ को दोबारा जांचेंगी। – Caridorc
फिर एक स्थिर टाइप की गई भाषा का उपयोग करें ... :) आप या तो इसे * खराब * चीज़ या * अच्छी * चीज़ के रूप में देख सकते हैं ... लेकिन यह –