Tôi có đoạn mã sau bên trong một hàm:Python đóng cửa: Viết thư cho biến trong phạm vi mẹ
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)
Thêm yếu tố để stored_blocks
hoạt động tốt, nhưng tôi không thể tăng num_converted
trong subfunction thứ hai:
UnboundLocalError: local variable 'num_converted' referenced before assignment
Tôi có thể sử dụng global
nhưng các biến toàn cầu rất xấu và tôi thực sự không cần biến đó thành toàn cục.
Vì vậy, tôi tò mò làm thế nào tôi có thể ghi vào một biến trong phạm vi chức năng của phụ huynh. nonlocal num_converted
có thể thực hiện công việc, nhưng tôi cần một giải pháp hoạt động với Python 2.x.
Trái ngược với niềm tin khá phổ biến (đánh giá theo loại câu hỏi này) 'def' không phải là từ khóa duy nhất định nghĩa một không gian tên: còn có' lớp'. –