में एक 'स्थानीय स्थिर' चर का अनुकरण करने पर विचार करें निम्नलिखित कोड:अजगर
def CalcSomething(a):
if CalcSomething._cache.has_key(a):
return CalcSomething._cache[a]
CalcSomething._cache[a] = ReallyCalc(a)
return CalcSomething._cache[a]
CalcSomething._cache = { }
यह सबसे आसान तरीका है मैं अजगर में एक 'स्थानीय स्थिर' चर का अनुकरण के लिए के बारे में सोच सकते हैं।
मुझे क्या परेशान करती है कि CalcSomething._cache समारोह की परिभाषा के बाहर बताया गया है है, लेकिन वैकल्पिक ऐसा ही कुछ होगा: समारोह की परिभाषा, जो वास्तव में बोझिल है अंदर
if not hasattr(CalcSomething, "_cache"):
setattr(CalcSomething, "_cache", { })
।
क्या कोई और शानदार तरीका है?
[संपादित करें]
बस स्पष्ट करने के लिए, यह प्रश्न स्थानीय फ़ंक्शन कैश के बारे में नहीं है, जैसा उपरोक्त उदाहरण सुझाव दे सकता है। यहां एक और छोटा उदाहरण दिया गया है जहां 'स्थैतिक स्थानीय' आसान हो सकता है:
def ParseString(s):
return ParseString._parser.parse(s)
# Create a Parser object once, which will be used for all parsings.
# Assuming a Parser object is heave on resources, for the sake of this example.
ParseString._parser = Parser()
बीटीडब्ल्यू, आप मील ght अपने प्रश्न को अलग-अलग वाक्यांश बनाना चाहते हैं। आप स्थानीय स्थैतिक चर की तलाश नहीं कर रहे हैं, लेकिन आपके फ़ंक्शन में ज्ञापन को पेश करने के लिए। –
आपका दूसरा उदाहरण पहले की तुलना में सबसे खराब है। आप datetime.datetime.strptime (डीटीएस, "% एम-% डी-% वाई% एच:% एम:% एस") वापस कर सकते हैं क्योंकि स्ट्रेटटाइम एक क्लास विधि है जो एक नया डेटाटाइम ऑब्जेक्ट बनाता है। डेटाटाइम ऑब्जेक्ट को बनाने के लिए वास्तव में कोई ज़रूरत नहीं है। – nosklo
आप दूसरे उदाहरण के बारे में सही हैं। बदल गया –