总结:
运行正确
- 内部函数,不修改全局变量可以访问全局变量
- 内部函数,修改同名全局变量,则python会认为它是一个局部变量
- 在内部函数修改同名全局变量之前调用变量名称(如print sum),则引发Unbound-LocalError
如果内部函数有引用外部函数的同名变量或者全局变量,并且对这个变量有修改.那么python会认为它是一个局部变量,又因为函数中没有sum的定义和赋值,所以报错。
测试:
import threading
import time
COUNT=10
def printHello():
print(COUNT)
COUNT = COUNT -1
def main():
threads = []
for i in range(0,1):
t = threading.Thread(target=printHello)
threads.append(t)
for t in threads:
t.start()
for t in threads:
t.join()
if __name__ == '__main__':
main()
报错:UnboundLocalError: local variable 'COUNT' referenced before assignment
import threading
import time
LOCK = threading.Lock()
COUNT=10
def printHello():
global COUNT
print(COUNT)
LOCK.acquire()
COUNT = COUNT -1
LOCK.release()
def main():
threads = []
for i in range(0,10):
t = threading.Thread(target=printHello)
threads.append(t)
for t in threads:
t.start()
for t in threads:
t.join()
if __name__ == '__main__':
main()
运行正确