Đối với Python 2,7 mã sau:Gán cho biến từ chức năng cha mẹ: "biến địa phương tham chiếu trước khi chuyển nhượng"
#!/usr/bin/python
def funcA():
print "funcA"
c = 0
def funcB():
c += 3
print "funcB", c
def funcC():
print "funcC", c
print "c", c
funcB()
c += 2
funcC()
c += 2
funcB()
c += 2
funcC()
print "end"
funcA()
tôi nhận được lỗi sau:
File "./a.py", line 9, in funcB
c += 3
UnboundLocalError: local variable 'c' referenced before assignment
Nhưng khi tôi nhận xét ra dòng c += 3
trong funcB
, tôi nhận được kết quả sau:
funcA
c 0
funcB 0
funcC 2
funcB 4
funcC 6
end
Không phải là c
được truy cập trong cả hai trường hợp +=
trong funcB
và =
trong funcC
? Tại sao nó không ném lỗi cho một nhưng không cho người khác?
Tôi không có lựa chọn tạo c
biến toàn cầu và sau đó khai báo global c
trong funcB
. Dù sao, điểm không phải là để có được c
tăng lên trong funcB
nhưng tại sao nó ném lỗi cho funcB
và không cho funcC
trong khi cả hai đang truy cập một biến đó là địa phương hoặc toàn cầu.
chuyển c thành thông số ... – joaquin
tôi đã sửa đổi mã một chút bây giờ là phiên bản đúng của câu hỏi. – crk
Liên kết này cũng có một số thông tin, http://docs.python.org/faq/programming.html # why-am-i-get-an-unboundlocalerror-when-the-variable-has-a-giá trị –