मैं एक समस्या को समझ कर कोड के निम्न भाग के परिणाम के साथ हो रहा है है बनाम:अजगर वर्ग और वैश्विक स्थानीय चर
my_str = "outside func"
def func():
my_str = "inside func"
class C():
print(my_str)
print((lambda:my_str)())
my_str = "inside C"
print(my_str)
उत्पादन होता है:
outside func
inside func
inside C
कोड का एक और टुकड़ा है:
my_str = "not in class"
class C:
my_str = "in the class"
print([my_str for i in (1,2)])
print(list(my_str for i in (1,2)))
उत्पादन होता है:
[‘in the class’, 'in the class’]
['not in class’, 'not in class’]
सवाल यह है:
- क्या प्रत्येक प्रिंट() बयान में यहां हो रहा है?
- क्या कोई क्यों समझा सकता है प्रिंट() कथन विभिन्न नामस्थानों से स्ट्रिंग प्राप्त करता है?
संपादित करें 1:
मुझे लगता है कि इस this question से अलग है क्योंकि मैं विनम्रतापूर्वक वहाँ जवाब लगता है इस बदलाव की व्याख्या नहीं करते:
my_str = "outside func"
def func():
my_str = "inside func"
class C():
print(my_str)
print((lambda:my_str)())
#my_str = "inside C"
print(my_str)
उत्पादन होता है:
inside func
inside func
inside func
संपादित करें 2:
दरअसल, इस this question से डुप्लिकेट है क्योंकि मार्टिन पीटर्स कहते हैं:
जवाब में कहा गया है: एक नाम लगभग शुरू में एक वर्ग के शरीर, भीतर करने के लिए सौंपा गया है। आपने my_str को असाइन किया है, इसे उसी मामले में बना रहा है। उस लाइन पर टिप्पणी करने का मतलब है कि अब आप my12str पर असाइन नहीं कर रहे हैं, इसे एक्स के समान केस बनाते हैं।
@MartijnPieters अंटी के खूबसूरत उत्तर में पहला मामला शामिल है। दूसरा मामला उस पर उलझ जाता है लेकिन फिर भी यह एक सटीक डुप्ली नहीं है। शायद मैं इस प्रश्न पर भविष्य के आगंतुकों के लिए उस लिंक को छोड़ दूंगा। (आप पहले से ही मसौदा संस्कार तैयार कर चुके हैं;)) –
@ भार्गवराव: क्षमा करें, मुझे वास्तव में माना जाता है कि आप [पायथन स्कॉइंग नियमों का संक्षिप्त वर्णन] (http://stackoverflow.com/q/291978) से लिंक कर रहे थे! यह वास्तव में एक डुप्ली है। –