मेरा मानना है कि पायथन स्थानीय चर के लिए फ़ंक्शन स्कोप का उपयोग करता है। अर्थात, किसी भी दिए गए फ़ंक्शन में, यदि आप किसी स्थानीय चर के लिए मान निर्दिष्ट करते हैं, तो वह उस पल के भीतर उस फ़ंक्शन के भीतर तब तक उपलब्ध होगा जब तक वह वापस न आए। इसलिए, चूंकि आपके कोड की दोनों शाखाओं को a
को असाइन करने की गारंटी है, इसलिए शुरुआत में None
a
असाइन करने की आवश्यकता नहीं है।
ध्यान दें कि जब आप बाहरी कार्यों में घोषित चरों तक पहुंच सकते हैं - दूसरे शब्दों में, पायथन बंद हो जाता है।
def adder(first):
def add(second):
return first + second
return add
यह योजक नामक फ़ंक्शन को परिभाषित करता है। जब first
पर तर्क के साथ बुलाया जाता है, तो यह एक फ़ंक्शन लौटाएगा जो first
पर जो भी तर्क प्राप्त करता है उसे जोड़ देगा और उस मान को वापस कर देगा। उदाहरण के लिए:
add_two = adder(2)
add_three = adder(3)
add_two(4) # = 6
add_three(4) # = 7
भले ही आप बाहरी समारोह से मूल्य पढ़ सकते हैं, आप इसे (कई अन्य भाषाओं में विपरीत) बदल नहीं सकते। उदाहरण के लिए, एक संचयक को लागू करने की कोशिश की कल्पना करें। तुम इतनी तरह कोड लिख सकते हैं:
def accumulator():
total = 0
def add(number):
total += number
return total
return add
दुर्भाग्य से, एक त्रुटि संदेश में इस कोड के परिणाम का उपयोग करने की कोशिश कर:
UnboundLocalError: local variable 'total' referenced before assignment
इसका कारण यह है लाइन total += number
की कोशिश करता है total
के मूल्य बदलने के लिए जो नहीं कर सकते पायथन में इस तरह से किया जाना चाहिए।
स्रोत
2010-03-01 23:00:20
पाइथन में एक चर "घोषित" जैसी कोई चीज़ नहीं है! –