0

更具体地说,我将展示代码,然后解释发生了什么。

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 的范围没有达到主要功能,为什么?

4

1 回答 1

3

好,只读...因此它必须是全球范围的日期

DATE = "November"
def main():
    xyz=DATE
    print "Date :",DATE
if __name__ == "__main__":
   main()

BAD (w/error) ,发生这种情况是因为 python 认为您正在谈论的 DATE 是您稍后分配的 DATE,这是一个 LOCAL 变量,它会影响 GLOBAL 变量。

DATE = "November"
def main():
    xyz=DATE
    print "Date :",DATE
    DATE = 123
if __name__ == "__main__":
   main()

好(再次)!!!,现在 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
于 2013-03-18T22:43:10.353 回答