Một tìm kiếm google cho "python nonlocal" đã đưa ra Đề xuất, PEP 3104 , mô tả đầy đủ cú pháp và lý do đằng sau tuyên bố. Nói tóm lại, nó hoạt động chính xác giống như global
câu lệnh, ngoại trừ việc nó được sử dụng để chỉ các biến không phải là toàn cục cũng không cục bộ của hàm.
Đây là một ví dụ ngắn gọn về những gì bạn có thể làm với điều này. Trình tạo bộ đếm có thể được viết lại để sử dụng cái này để nó trông giống như thành ngữ của các ngôn ngữ có bao đóng.
def make_counter():
count = 0
def counter():
nonlocal count
count += 1
return count
return counter
Rõ ràng, bạn có thể viết điều này như một trình tạo, như:
def counter_generator():
count = 0
while True:
count += 1
yield count
Nhưng trong khi đây là con trăn hoàn toàn thành ngữ, có vẻ như phiên bản đầu tiên sẽ rõ ràng hơn một chút cho người mới bắt đầu. Sử dụng đúng máy phát điện, bằng cách gọi hàm trả về, là một điểm nhầm lẫn phổ biến. Phiên bản đầu tiên trả về một hàm rõ ràng.