मैं निम्नलिखित कोड एक समारोह के अंदर है:अजगर बंद: माता-पिता दायरे में चर करने के लिए लिखें
stored_blocks = {}
def replace_blocks(m):
block = m.group(0)
block_hash = sha1(block)
stored_blocks[block_hash] = block
return '{{{%s}}}' % block_hash
num_converted = 0
def convert_variables(m):
name = m.group(1)
num_converted += 1
return '<%%= %s %%>' % name
fixed = MATCH_DECLARE_NEW.sub('', template)
fixed = MATCH_PYTHON_BLOCK.sub(replace_blocks, fixed)
fixed = MATCH_FORMAT.sub(convert_variables, fixed)
तत्वों को जोड़ने stored_blocks
को ठीक काम करता है, लेकिन मैं दूसरे subfunction में num_converted
में वृद्धि नहीं कर सकते हैं:
UnboundLocalError: local variable 'num_converted' referenced before assignment
मैं global
का उपयोग कर सकता हूं लेकिन वैश्विक चर बदसूरत हैं और मुझे वास्तव में उस चर को वैश्विक होने की आवश्यकता नहीं है।
तो मैं उत्सुक हूं कि मैं पैरेंट फ़ंक्शन के दायरे में एक चर को कैसे लिख सकता हूं। nonlocal num_converted
शायद नौकरी करेगा, लेकिन मुझे एक समाधान की आवश्यकता है जो पायथन 2.x के साथ काम करता है।
कुछ हद तक लोकप्रिय विश्वास (इस तरह के प्रश्नों के आधार पर निर्णय) के विपरीत 'def' एकमात्र कीवर्ड नहीं है जो नामस्थान को परिभाषित करता है:' वर्ग 'भी है। 2.12 कामों में –