Hãy xem xét ví dụ sau:Biến được xác định với câu lệnh có sẵn bên ngoài với khối?
with open('a.txt') as f:
pass
# Is f supposed to be defined here?
Tôi đã đọc các tài liệu ngôn ngữ (2.7) cho có câu lệnh cũng như PEP-343, nhưng như xa như tôi có thể nói họ không nói bất cứ điều gì về vấn đề này .
Trong CPython 2.6.5 f
dường như được định nghĩa bên ngoài khối, nhưng tôi không muốn dựa vào chi tiết triển khai có thể thay đổi.
Câu hỏi có hay không f sẽ có sẵn trong phạm vi kèm theo đã được trả lời. Đối với tôi, toàn bộ khái niệm về các nhà quản lý ngữ cảnh được nhấp vào khi tôi nhận ra rằng khái niệm về ngữ cảnh * khác với khái niệm * phạm vi *. Đây là một liên kết đến trang web của tôi hy vọng sẽ giúp một chút: http://www.markus-gattol.name/ws/python.html#context_manager – Tom
Chính xác - ngữ cảnh là vấn đề thay đổi trạng thái hiện tại của tệp - mở, tệp đóng hoặc khóa luồng/mở khóa. Thiết bị được phân bổ/deallocated. Tất cả các biến được đặt tên trong phạm vi vẫn ở đó - nhưng bây giờ chúng sẽ trỏ đến các xử lý được phân phối/đóng/mở khóa. –