Đối với Python 2.7, chúng tôi có các loại biến: global, local. Mỗi hàm tạo ra phạm vi cục bộ của riêng nó cho các biến.
Từ phạm vi địa phương, bạn có thể đọc mà không có bất kỳ hạn chế nào. Bạn cũng có thể gọi các phương pháp đối tượng chung, để bạn có thể sửa đổi biến từ toàn cầu. Nhưng bạn không thể gán lại giá trị.
Nhìn vào mã này:
requests = [1,2,3]
def modify():
requests.append(4)
def redeclare():
requests = [10,20,30]
modify()
print requests
# will give you [1,2,3,4]
redeclare()
print requests
# will give you [1,2,3,4]
gì đang xảy ra? Bạn không thể gán lại requests
biến từ phạm vi địa phương, do đó, thông dịch viên sẽ tạo cho bạn khác biến - trong phạm vi địa phương cho redeclare
ngữ cảnh cuộc gọi.
Về mã của bạn ... Thứ nhất, bạn cố gắng gán lại biến từ phạm vi toàn cầu. Tại sao? url_request
là int
, int
là không thay đổi, do đó hoạt động url_request+=1
không thay đổi giá trị, nó sẽ gán lại giá trị mới cho tên biến. Thứ hai, bạn không chỉ định global
xác định cho biến này. Vì vậy, chỉ có một tùy chọn cho thông dịch viên - giả sử url_request
làm biến cục bộ. Nhưng ... Bạn không khai báo giá trị của nó ở bất kỳ đâu ....
UnboundLocalError
có nghĩa là bạn cố gắng thực hiện các phép toán có giá trị thay đổi mà không cần khai báo trước đó. Hy vọng điều này sẽ giúp bạn hiểu thêm về các biến/tên/phạm vi Python.
Nguồn
2012-12-10 10:18:18
Không bao giờ biết điều đó. Cảm ơn rất nhiều. – user1561108
Thậm chí không suy nghĩ một giây rằng '+ =' đang thực hiện một nhiệm vụ. –