更具体地说,我将展示代码,然后解释正在发生的事情。
DATE = 'November'
def commander():
pass
class Circle():
pass
def log(orig_stdout, rep_log):
pass
def debug(debugBool, info):
pass
def main():
Date = DATE
假设每个功能都填写完毕,那不是重要的部分。重要的是main()
无法看到DATE
,而我得到通常的"UnboundLocalError: local variable 'DATE' referenced before assignment"
例外。
我认为常数具有全球范围?更奇怪的是它以前运作良好,但现在只是造成问题。如果你喜欢我可以告诉你剩下的代码,但它有点乱。
TL; DR:DATE的范围没有达到主要功能,为什么?
答案 0 :(得分:3)
GOOD,只读取...因此它必须是GLOBALLY Scoped DATE
DATE = "November"
def main():
xyz=DATE
print "Date :",DATE
if __name__ == "__main__":
main()
BAD(w / error),这是因为python认为你正在谈论的DATE是你稍后分配的DATE,这是一个影响GLOBAL的LOCAL变量。
DATE = "November"
def main():
xyz=DATE
print "Date :",DATE
DATE = 123
if __name__ == "__main__":
main()
GooD(再次)!!! ,现在python知道你在谈论GLOBAL变量DATE
DATE = "November"
def main():
global DATE
xyz=DATE
print "Date :",DATE
DATE = 123
if __name__ == "__main__":
main()
至少这是我对Globals的理解。通常更好的做法是使用带有默认变量的参数
def main(my_date=DATE):
#now there is no question and it will use global scope
#the downside is it is set to the value of DATE at run start not at the time it goes to main