जो आप पूछ रहे हैं वह वास्तव में समझ में नहीं आता है।
एक फ़ंक्शन के स्थानीय चर के पास हर समय मूल्य नहीं होते हैं।
def foo(x):
y = x + 27
return y
foo
के स्थानीय चर y
का मूल्य क्या है: इस समारोह पर विचार करें? आप जवाब नहीं दे सकते हैं, जब तक आप foo
पर कॉल नहीं करते हैं तब तक सवाल तब तक समझ में नहीं आता है (और फिर भी, जब तक कि y = x + 27
निष्पादित नहीं किया जाता है)।
और फिर भी यह है कि अभी y
इस समय एक मूल्य नहीं हो सकता नहीं है, वहाँ "उड़ान" foo
के लिए सजा के किसी भी संख्या हो सकता है। foo
निष्पादित धागे हो सकते हैं, या foo
रिकर्सिव (संभावित रूप से परोक्ष रूप से) हो सकता है ताकि एक कॉल कॉल में भी एक से अधिक कॉल प्रगति पर हो। या foo
जनरेटर हो सकता है, इसलिए रिकर्सन के बिना भी कई उड़ानें foo
निष्पादन हो सकती हैं (यानी।वे सभी बाहरीतम foo
दायरे से पहुंच योग्य नहीं हैं)। तो क्या आपको y
का मूल्य मिलेगा?
foo
में y
का मूल्य सिर्फ एक अच्छी तरह से परिभाषित अवधारणा जब तक आप foo
के दायरे के भीतर के बारे में बात कर रहे हैं नहीं है।
अजगर के लचीलेपन को देखते हुए, मैं बहुत यकीन है कि यह स्टैक फ्रेम आत्मनिरीक्षण करते हैं और foo
के लिए एक ढेर फ्रेम को खोजने के लिए संभव है जब है कोई भी वर्तमान रहते हैं और उस समय उसके स्थानीय चरों के मान को बाहर खींच रहा हूँ। यह एक सजावटी के साथ करने के लिए बहुत कठिन (यदि असंभव नहीं है), क्योंकि (foo
जनरेटर नहीं है) सजावट केवल foo
"रैपर कोड" को जोड़ सकता है, जिसका अर्थ है कि सजावटकर्ता द्वारा नियंत्रित कोड foo
रनों के पहले और बाद में चलता है , इसलिए आपको केवल नियंत्रण प्राप्त होता है जब foo
का स्टैक फ्रेम मौजूद नहीं होता है।
मैं विशिष्ट बिंदुओं को बिल्कुल ठीक करने के लिए नहीं कहूंगा, क्योंकि मुझे नहीं पता कि यह कैसे करना है। ऐसा लगता है कि यह लगभग निश्चित रूप से एक बुरा विचार है, जब तक कि आप एक डीबगर लिख रहे हों।
काम करता है। मैं पहले स्थान पर इसके बारे में एक बुरा विचार मानता हूं लेकिन मुझे यह देखने में दिलचस्पी थी कि यह संभव है या नहीं। – Harel
ग्रेट चाल। मैं एक डीबगर कर रहा हूं जिसे एक सजाए गए समारोह से चुपके से आंतरिक पकड़ लेना है और इसके लिए यह वैध रूप से उपयोगी है। ध्यान देने योग्य बात यह है कि ट्रैसर() को सजाए गए फ़ंक्शन की वापसी पर ही नहीं, बल्कि उस फ़ंक्शन के भीतर से जुड़े सभी कार्यों के रिटर्न पर भी कहा जाता है। चूंकि सजाए गए कार्य में हमेशा अंतिम वापसी होती है, (और इसलिए अंतिम बार _locals सेट करता है) इससे कोई फर्क नहीं पड़ता। – Peter